与Jasmine 2.0的jasmine-jquery loadFixtures将无法正常工作

时间:2014-02-13 19:15:08

标签: jasmine jasmine-jquery

我花了大约一天时间调试这个,我很茫然。看起来jasmine-jquery 2.0.2中的某些东西不起作用。

我正在从Jasmine 1.3.1和jasmine-jquery 1.5更新到最新版本。根据我如何尝试加载灯具,我会遇到各种故障。在调整jasmine-jquery为ajax.fail()方法提供参数后,我得到“Fixture无法加载:./ExposureWorksheetFixture.html(status:parsererror,message:Invalid XML”)。

我有另一个效果,当我调整样品茉莉花跑步者和测试时,它说“零固定,零失败”。当我引用jasmine-jquery,jquery 1.10.2并尝试设置fixture时会发生这种情况。如果我删除了操作(但保留了引用),则样本可以正常工作。

我尝试加载灯具时遇到的另一个错误是“(状态:错误,消息:访问受限制的URI被拒绝)”。这似乎发生在它实际上尝试加载文件时,该文件位于指定的位置。我看到另一个问题,指向jquery需要一个真正的Web服务器来加载文件,它不喜欢本地文件路径,但我没有这些库的旧版本的这个问题。这种情况发生在Firefox中。我在IE 8中得到TypeError: Object doesn't support this property or method。在Firefox中,我得到Error: Fixture could not be loaded: spec/javascripts/fixtures/fixture.html (status: error, message: A network error occurred.)

以下是一些示例代码......

在PlayerSpec.js中:

jasmine.getFixtures().fixturesPath = "./";
...
beforeEach(function() {
  player = new Player();
  song = new Song
loadFixtures("fixture.html");
});

在SpecRunner.html中,请注意对jquery和jasmine-jquery的额外引用:

<!DOCTYPE HTML>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Jasmine Spec Runner v2.0.0</title>

  <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png">
  <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css">

  <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
  <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
  <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
  <script type="text/javascript" src="lib/jquery-1.10.2.js"></script>
  <script type="text/javascript" src="lib/jasmine-jquery.js"></script>

  <!-- include source files here... -->
  <script type="text/javascript" src="src/Player.js"></script>
  <script type="text/javascript" src="src/Song.js"></script>

  <!-- include spec files here... -->
  <script type="text/javascript" src="spec/SpecHelper.js"></script>
  <script type="text/javascript" src="spec/PlayerSpec.js"></script>

</head>

<body>
</body>
</html>

跑步者的输出(第一次测试 - 所有测试都失败)

Jasmine2.0.0finished in 0.019s

raise exceptions5 specs, 5 failuresSpec List | Failures
Player should be able to play a Song
Error: Fixture could not be loaded: spec/javascripts/fixtures/fixture.html (status: error, message: Access to restricted URI denied) in file:///D:/Temp/jas/lib/jasmine-jquery.js (line 132)
jasmine.Fixtures.prototype.loadFixtureIntoCache_/request<@file:///D:/Temp/jas/lib/jasmine-jquery.js:132 jQuery.Callbacks/fire@file:///D:/Temp/jas/lib/jquery-1.10.2.js:3048 jQuery.Callbacks/self.add@file:///D:/Temp/jas/lib/jquery-1.10.2.js:3094 jasmine.Fixtures.prototype.loadFixtureIntoCache_@file:///D:/Temp/jas/lib/jasmine-jquery.js:131 jasmine.Fixtures.prototype.getFixtureHtml_@file:///D:/Temp/jas/lib/jasmine-jquery.js:115 jasmine.Fixtures.prototype.read@file:///D:/Temp/jas/lib/jasmine-jquery.js:77 jasmine.Fixtures.prototype.load@file:///D:/Temp/jas/lib/jasmine-jquery.js:65 jasmine.Fixtures.prototype.proxyCallTo_@file:///D:/Temp/jas/lib/jasmine-jquery.js:161 window.loadFixtures@file:///D:/Temp/jas/lib/jasmine-jquery.js:763 @file:///D:/Temp/jas/spec/PlayerSpec.js:9 attemptSync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1510 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1498 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Spec.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:309 Suite.prototype.execute/wrapChildAsAsync/<@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1708 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Suite.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1696 Suite.prototype.execute/wrapChildAsAsync/<@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1708 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Suite.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1696 @file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:541 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 @file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:548 window.onload@file:///D:/Temp/jas/lib/jasmine-2.0.0/boot.js:170 

编辑2/13/14 @ 8:32 pm est:我只是尝试更新jasmine-jquery,当我这样做时,一切都失败了(Jasmine 1.31)。我想这个库肯定会发生一些事情:(

3 个答案:

答案 0 :(得分:4)

我要感谢travisjeffery的回答。虽然这不是我的问题的解决方案,但它让我回到尝试不同的事情。我发布的具体样本的答案是,我将灯具放在带有规格的文件夹中,而不是带有转轮的文件夹,路径是相对于跑步者定义的。但是,我的真实设置问题仍然存在。因为我终于得到了一份工作样本,所以我去找工作搞清楚我做错了什么。

主要问题是我的HTML Fixture在jasmine-jquery 1.5中有效,在2.0.2版本中不再有效。我以为我之前通过删除一个部分来覆盖所有语法可能性,但是当我再次时,,我发现删除我的脚本部分得到了夹具加载。我把它放回去了,但是里面的是html元素,而不是之后。我认为这相当于XML文档中的两个根元素,因此 BAM!解析错误。

另一个问题是我必须在加载boot.js文件之后将jasmine-jquery脚本放在运行器中,否则我得到“0 fixtures 0 failure”。在那之后,我不得不更新Jasmine语法,现在我再次进行了一组有效的测试。我希望这有助于其他人。

答案 1 :(得分:3)

我维持jasmine-jquery。

jasmine和jasmine-jquery在这里很好,问题是加载夹具的ajax请求不符合浏览器的安全策略。在jasmine-jquery的自述文件中有一节:https://github.com/velesin/jasmine-jquery/#cross-domain-policy-problems-under-chrome

答案 2 :(得分:0)

感谢。我把它添加到spec_helper.js.coffee:

# rake spec:javascript loads specs relative to the tmp/jasmine/runner.html, need to override:
jasmine.getFixtures().fixturesPath="../../spec/javascripts/fixtures"