【问题标题】:Jasmine : Fixture could not be loaded茉莉花:无法加载夹具
【发布时间】:2016-02-19 05:39:16
【问题描述】:

所以我想进入 Test Driven Development 并决定在我的项目中使用 Jasmine

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

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

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

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

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

所以当我手动访问 localhost/fixture/my_fixture 时,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 时,我的浏览器会正确显示夹具的内容。

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

编辑

  • 网络服务器:Apache
  • 浏览器:Chrome
  • 操作系统: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'

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

谢谢。

【问题讨论】:

    标签: javascript jasmine tdd fixture


    【解决方案1】:

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

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

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

    【讨论】:

    • 你好,埃里克。我在 windows 7 上运行 apache 服务器。我在 Chrome 上运行 jasmine SpecRunner。夹具只包含一个带有几个按钮、单选按钮和文本字段的表单。在该表单之上有一些 javascript,这就是为什么我希望能够实现测试作为避免回归的一种方式,以防我修改某些内容。我不明白你为什么建议我放弃固定装置。这个概念很简单,如果它可以变得棘手,那么这是一个学习的好机会。
    【解决方案2】:

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

    总结

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

    2. 我尝试使用 chrome 标志 --allow-file-access-from-files,但没有成功。所以我放弃了使用本地文件中的夹具。

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

    4. 我下载了 firefox 并尝试使用上面第 3 点的配置执行 jasmine specRunner(由 Web 服务器提供服务),但还是不行。

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

    结论

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

    【讨论】:

    • 1 是真的吗?我能够从本地 html 文件加载一个夹具,并在 Chrome 中使用 Jasmine 执行单元测试。
    【解决方案3】:

    在命令行中可以写:

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 2014-12-12
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      相关资源
      最近更新 更多