Jasmine:无法装入夹具

时间:2016-02-19 05:39:16

标签: javascript jasmine tdd fixture

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

问题是,我无法加载灯具

通常提出的2种解决方案

  1. 使用--allow-file-access-from-files
  2. 运行chrome
  3. 从本地服务器提供文件
  4. 所以我使用了第一个解决方案,但没有结果。

    然后我设置了我的网络服务器的路由,以便 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时,我的浏览器会显示夹具的内容而不会出错。

    因此,我不明白这个错误的原因。有没有人有洞察力?

    修改

    • 网络服务器: Apache
    • 浏览器: Chrome
    • 操作系统: Windows 7

    修改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'
    

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

    感谢。

3 个答案:

答案 0 :(得分:0)

如果不至少了解服务器的性质或者灯具的外观,就很难回答。服务器只是一个简单的文件服务器,如node-http-server,还是指向你的应用程序?它是否正确地为夹具服务?你的夹具是否有错误?我不能从这里说出任何相关信息。

我要说的是,如果你刚刚开始TDD,你应该完全避免使用灯具。对TDD新手来说,最大的挑战之一就是编写足够小的测试,并且使用Jasmine fixtures可以轻松编写非常大的测试。

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

答案 1 :(得分:0)

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

总结

  1. 使用chrome,我尝试从本地文件加载jasmine fixture,这对chrome不起作用(这是已知的,出于安全原因而被禁用)。

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

  3. 我明白夹具文件必须从我的网络服务器提供,我做了。但它也没有用,因为一些Ajax错误与灯具的缓存有关。我尝试更新我的jquery版本(有点旧),但它没有用。最后,我无法理解问题所在。

  4. 我下载了firefox并尝试使用上面的 3 点的配置执行jasmine specRunner(由web服务器提供的夹具)但是再一次,它没有用。

    < / LI>
  5. 使用firefox ,我又回到了第1点中使用本地灯具文件的方法,确实有效。我讨厌这个解决方案,但我需要继续前进,这样就可以了。

  6. <强>结论

    如果遇到这种问题,请节省一些时间并使用firefox,这将允许使用本地夹具文件。

答案 2 :(得分:0)

在命令行中,您可以写:

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

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