所以我想进入测试驱动开发并决定在我的项目中使用 Jasmine 。
问题是,我无法加载灯具。
通常提出的2种解决方案:
所以我使用了第一个解决方案,但没有结果。
然后我设置了我的网络服务器的路由,以便 localhost / fixture / my_fixture 返回my_fixture.html的内容。
因此,当我手动访问 localhost / fixture / my_fixture 时,灯具的内容会显示在屏幕上。但在我的茉莉花spec文件中,当我使用:
jasmine.getFixtures().fixturesPath = 'http://localhost/fixture'
loadFixtures('quizz_fixture')
我收到以下错误:
Error: Fixture could not be loaded: http://localhost/fixture/quizz_fixture
(status: error, message: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://localhost/fixture/quizz_fixture?_=1455854875950'.)
当我使用错误中给出的URL时,我的浏览器会显示夹具的内容而不会出错。
因此,我不明白这个错误的原因。有没有人有洞察力?
修改:
修改2
问题来自 jasmine-jquery ,位于下面第139行,其中调用了 fail 函数。我无法弄清楚发生了什么,因为可以加载的网址实际上只能在我的浏览器中加载:
jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
var self = this
, url = this.makeFixtureUrl_(relativeUrl)
, htmlText = ''
, request = $.ajax({
async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
cache: false,
url: url,
dataType: 'html',
success: function (data, status, $xhr) {
htmlText = $xhr.responseText
}
}).fail(function ($xhr, status, err) {
throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')')
})
结果是:
Failed to load 'http://localhost/fixture/quizz_fixture.html?_=1456886216017'
在浏览器中调用时有效。我只是不明白。
感谢。
答案 0 :(得分:0)
如果不至少了解服务器的性质或者灯具的外观,就很难回答。服务器只是一个简单的文件服务器,如node-http-server,还是指向你的应用程序?它是否正确地为夹具服务?你的夹具是否有错误?我不能从这里说出任何相关信息。
我要说的是,如果你刚刚开始TDD,你应该完全避免使用灯具。对TDD新手来说,最大的挑战之一就是编写足够小的测试,并且使用Jasmine fixtures可以轻松编写非常大的测试。
相反,我建议手动将您需要的最少DOM添加到页面中,并在后挂钩中删除它。 jasmine-fixture是一个基本上可以做到这一点的工具。这将迫使您考虑编写测试实际需要多少DOM,并使您在测试中看到的DOM更改可见。
答案 1 :(得分:0)
所以我找到了一个非常不满意的解决方案,但仍然是一个解决方案。
总结
使用chrome,我尝试从本地文件加载jasmine fixture,这对chrome不起作用(这是已知的,出于安全原因而被禁用)。
我尝试使用chrome标志 - allow-file-access-from-files ,但它不起作用。所以我放弃了使用本地文件夹具。
我明白夹具文件必须从我的网络服务器提供,我做了。但它也没有用,因为一些Ajax错误与灯具的缓存有关。我尝试更新我的jquery版本(有点旧),但它没有用。最后,我无法理解问题所在。
我下载了firefox并尝试使用上面的 3 点的配置执行jasmine specRunner(由web服务器提供的夹具)但是再一次,它没有用。
< / LI>使用firefox ,我又回到了第1点中使用本地灯具文件的方法,确实有效。我讨厌这个解决方案,但我需要继续前进,这样就可以了。
<强>结论强>
如果遇到这种问题,请节省一些时间并使用firefox,这将允许使用本地夹具文件。
答案 2 :(得分:0)
在命令行中,您可以写:
start chrome --allow-file-access-from-files "path_to_test/SpecRunner.html"
这解决了我...希望可以帮助更多的人。