Jasmine:无法加载夹具
Jasmine : Fixture could not be loaded
所以我想进入测试驱动开发并决定在我的项目中使用Jasmine。
问题是,我无法加载灯具。
通常提出的 2 种解决方案是:
- 运行 chrome 与 --allow-file-access-from-files
- 从您的本地服务器提供文件
所以我用了第一个方案,但是没有结果。
然后我设置了我的网络服务器的路由,这样 localhost/fixture/my_fixture 就会 return my_fixture.html.[=14= 的内容]
所以当我手动访问localhost/fixture/my_fixture时,灯具的内容显示在屏幕上。但是在我的 jasmine 规范文件中,当我使用 :
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 时,我的浏览器显示了 fixture 的内容而没有错误。
因此,我不明白这个错误的原因。有没有人有见识?
编辑:
- Web 服务器:Apache
- 浏览器:Chrome
- OS : Windows 7
编辑 2
问题来自 jasmine-jquery,在下面的第 139 行,其中调用了 fail 函数。我无法弄清楚发生了什么,因为据称无法加载的 URL 实际上在我的浏览器中加载得很好:
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'
在浏览器中调用时有效。我只是不明白。
谢谢。
如果不至少了解一点服务器的性质或夹具的外观,就很难回答。服务器只是像 node-http-server 这样的简单文件服务器,还是指向您的应用程序?它是否正确地服务于夹具?你的夹具有错误吗?我不能从这里说出任何这些。
不过我要说的是,如果您刚刚开始 TDD,您应该完全避免固定装置。对于刚接触 TDD 的人来说,最大的挑战之一是编写足够小的测试,而 Jasmine fixture 使得编写真正大的测试变得容易。
相反,我建议手动将您需要的最低限度的 DOM 添加到页面,并在 after 挂钩中将其删除。 jasmine-fixture 是一个基本上可以做到这一点的工具。这将迫使您考虑编写测试实际需要多少 DOM,并使您所做的 DOM 更改在测试本身中可见。
所以我找到了一个非常不令人满意的解决方案,但仍然是一个解决方案。
总结
使用 chrome,我尝试从本地文件加载 jasmine fixture,这不适用于 chrome(这是已知的,出于安全原因禁用) .
我尝试使用 chrome 标志 --allow-file-access-from-files 但它没有用。所以我放弃了使用本地文件中的夹具。
我知道 fixture 文件必须从我的网络服务器提供,我也这样做了。但它也没有用,因为一些 Ajax 与固定装置缓存相关的错误。我尝试更新我的 jquery 版本(有点旧),但没有用。最后,我没能理解问题出在哪里。
我下载了 firefox 并尝试使用上面点 3 的配置执行 jasmine specRunner(网络服务器提供的固定装置),但同样,它没有工作。
使用firefox,我恢复到点1中的方法,即使用本地fixture文件, 它确实有效。我讨厌那个解决方案,但我需要继续前进,这样就可以了。
结论
如果遇到此类问题,请节省一些时间并使用允许使用本地固件文件的 firefox。
在命令行中你可以这样写:
start chrome --allow-file-access-from-files "path_to_test/SpecRunner.html"
这对我来说已经解决了...希望可以帮助更多人。
所以我想进入测试驱动开发并决定在我的项目中使用Jasmine。
问题是,我无法加载灯具。
通常提出的 2 种解决方案是:
- 运行 chrome 与 --allow-file-access-from-files
- 从您的本地服务器提供文件
所以我用了第一个方案,但是没有结果。
然后我设置了我的网络服务器的路由,这样 localhost/fixture/my_fixture 就会 return my_fixture.html.[=14= 的内容]
所以当我手动访问localhost/fixture/my_fixture时,灯具的内容显示在屏幕上。但是在我的 jasmine 规范文件中,当我使用 :
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 时,我的浏览器显示了 fixture 的内容而没有错误。
因此,我不明白这个错误的原因。有没有人有见识?
编辑:
- Web 服务器:Apache
- 浏览器:Chrome
- OS : Windows 7
编辑 2
问题来自 jasmine-jquery,在下面的第 139 行,其中调用了 fail 函数。我无法弄清楚发生了什么,因为据称无法加载的 URL 实际上在我的浏览器中加载得很好:
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'
在浏览器中调用时有效。我只是不明白。
谢谢。
如果不至少了解一点服务器的性质或夹具的外观,就很难回答。服务器只是像 node-http-server 这样的简单文件服务器,还是指向您的应用程序?它是否正确地服务于夹具?你的夹具有错误吗?我不能从这里说出任何这些。
不过我要说的是,如果您刚刚开始 TDD,您应该完全避免固定装置。对于刚接触 TDD 的人来说,最大的挑战之一是编写足够小的测试,而 Jasmine fixture 使得编写真正大的测试变得容易。
相反,我建议手动将您需要的最低限度的 DOM 添加到页面,并在 after 挂钩中将其删除。 jasmine-fixture 是一个基本上可以做到这一点的工具。这将迫使您考虑编写测试实际需要多少 DOM,并使您所做的 DOM 更改在测试本身中可见。
所以我找到了一个非常不令人满意的解决方案,但仍然是一个解决方案。
总结
使用 chrome,我尝试从本地文件加载 jasmine fixture,这不适用于 chrome(这是已知的,出于安全原因禁用) .
我尝试使用 chrome 标志 --allow-file-access-from-files 但它没有用。所以我放弃了使用本地文件中的夹具。
我知道 fixture 文件必须从我的网络服务器提供,我也这样做了。但它也没有用,因为一些 Ajax 与固定装置缓存相关的错误。我尝试更新我的 jquery 版本(有点旧),但没有用。最后,我没能理解问题出在哪里。
我下载了 firefox 并尝试使用上面点 3 的配置执行 jasmine specRunner(网络服务器提供的固定装置),但同样,它没有工作。
使用firefox,我恢复到点1中的方法,即使用本地fixture文件, 它确实有效。我讨厌那个解决方案,但我需要继续前进,这样就可以了。
结论
如果遇到此类问题,请节省一些时间并使用允许使用本地固件文件的 firefox。
在命令行中你可以这样写:
start chrome --allow-file-access-from-files "path_to_test/SpecRunner.html"
这对我来说已经解决了...希望可以帮助更多人。