如何在Jasmine中的JS源文件之前加载助手

时间:2017-03-24 03:21:47

标签: javascript jquery ruby-on-rails jasmine gon

这个问题特别是因为我使用gon,但从概念上讲它可以适用于其他情况,所以我试图扩大它。 Gon是一个漂亮的宝石,允许您在Rails控制器中声明一个变量,然后在您的Javascript中使用它。例如:

def index
  gon.this = "that"
end

// index.html
<script>
  console.log(gon.this)
  // would print "that"
</script>

具体如何发生这种情况是Gon注入了一段声明全局变量的脚本,如下所示:

<script>
  window.gon = {}
  gon.this = "that"
</script>

我使用Jasmine进行测试的代码如下所示:

// test.js
function loadProperPage() {
  if (gon.this == "that") {
    ...
  } else {
    ...
  }
}

正如您所看到的,gon立即被使用!我的问题是,Jasmine一直说gon尚未定义,所以我不确定如何以一种语义合理的方式“注入”它。我能想到它有意义的唯一方法是创建一个假的.js文件,并在我加载我正在测试的文件之前将其作为我javascript.yml中的源文件。即,它看起来像这样:

src_files:
  - assets/gon_variables.js
  - assets/test.js

但这不是一个可持续的解决方案,因为我不能在gon_variables.js文件中更改不同规格的虚拟变量......

通过最后一句话,我的意思是我一直在进行故障排除,并发现在灯具或spec文件本身中声明gon变量将无法正常工作。即以下两点都没有解决问题

/////// spec file approach

//spec file

describe...
  beforeEach(function() {
    gon.this = "that"
  })
})

/////// fixture file approach

// spec file
describe...
  beforeEach(function() {
    loadFixtures('test.html')
  })
})

// test.html fixture
<head>
   <script>
     var gon = {permission: "new"}
   </script>
</head>
<body>
  ...
</body>

这让我回到了我的问题。我的调试显然显示jasmine.yml中的JS文件是在fixtures或spec文件(及其之前的操作)之前加载的。因此,如何在jasmine.yml中的JS文件之前加载动态代码?有没有我可以使用的助手或......?请记住,这一点的重点在于我想根据规范更改我在JS文件之前加载的代码。即,有时我希望gon.this = "that",但有时我想gon.this = "those"

0 个答案:

没有答案