0

所以我想进入测试驱动开发并决定在我的项目中使用Jasmine 。

问题是,我无法加载固定装置

通常提出的两种解决方案是

  1. 使用 --allow-file-access-from-files 运行 chrome
  2. 从本地服务器提供文件

所以我使用了第一个解决方案,但没有结果。

然后我设置了我的网络服务器的路由,以便localhost/fixture/my_fixture将返回 my_fixture.html 的内容。

因此,当我手动访问localhost/fixture/my_fixture时,夹具的内容会显示在屏幕上。但是在我的茉莉花规格文件中,当我使用:

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 时,我的浏览器会正确显示灯具的内容。

因此,我不明白这个错误的原因。有没有人有见识?

编辑

  • 网络服务器:阿帕奇
  • 浏览器:
  • 操作系统:Windows 7

编辑 2

问题来自下面第 139 行的jasmine-jquery,其中调用了失败函数。我无法弄清楚发生了什么,因为应该无法加载的 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'

在浏览器中调用时有效。我只是不明白。

谢谢。

4

3 回答 3

0

如果不了解服务器的性质或固定装置的外观,真的很难回答。服务器只是像 node-http-server 这样的简单文件服务器,还是指向您的应用程序?它是否正确地为固定装置服务?你的夹具有错误吗?我不能从这里告诉任何人。

不过我想说的是,如果您刚刚开始 TDD,您可能应该完全避免使用固定装置。对于刚接触 TDD 的人来说,最大的挑战之一是编写足够小的测试,而 Jasmine 固定装置使编写真正大的测试变得容易。

相反,我建议手动将所需的最少 DOM 添加到页面并在后挂钩中将其删除。jasmine-fixture是一个基本上可以做到这一点的工具。这将迫使您考虑编写测试实际需要多少 DOM,并使您所做的 DOM 更改在测试本身中可见。

于 2016-02-19T13:16:18.087 回答
0

在命令行中,您可以编写:

start chrome --allow-file-access-from-files "path_to_test/SpecRunner.html"

这解决了我...希望可以帮助更多的人。

于 2016-06-04T22:02:37.417 回答
0

所以我找到了一个非常不令人满意的解决方案,但仍然是一个解决方案。

总结

  1. 使用 chrome,我尝试从本地文件加载 jasmine 固定装置,这不适用于 chrome(这是已知的,出于安全原因禁用)。

  2. 我尝试使用 chrome 标志--allow-file-access-from-files但它不起作用。所以我放弃了使用本地文件中的夹具。

  3. 我知道必须从我的网络服务器提供固定文件,我做到了。但它也不起作用,因为一些与固定装置缓存相关的 Ajax 错误。我尝试更新我的 jquery 版本(有点旧),但它没有用。最后,我无法理解问题所在。

  4. 我下载了 firefox 并尝试使用上面第3点的配置执行 jasmine specRunner (由 Web 服务器提供服务),但同样,它没有工作。

  5. 使用 firefox,我恢复到第1 点中的方法,该方法使用本地夹具文件,并且确实有效。我讨厌那个解决方案,但我需要继续前进,这样就可以了。

结论

如果遇到此类问题,请节省一些时间并使用允许使用本地固件文件的 firefox。

于 2016-03-02T03:25:41.713 回答