【问题标题】:Discrepancies between Jasmine tests: browser vs. PhamtomJSJasmine 测试之间的差异:浏览器与 PhamtomJS
【发布时间】:2014-04-02 01:55:43
【问题描述】:

我正在使用 grunt-contrib-jasmine 插件运行 BDD 测试。当我生成 _SpecRunner.html 并通过 Chrome 运行测试时,一切都很好。当我通过 PhantomJS 运行测试时,我收到错误消息,指出未加载 jQuery。

我正在测试的文件使用 LABjs 来加载 jQuery、jQueryUI 和一些其他依赖于它们的文件。此标签将放置在第三方网站上,因此加载 jQuery 需要此脚本。

(function(){
    function callback() {
        $LAB
        .script('path_to_jQuerry').wait()
        .script('path_to_jQueryUI').wait()
        .script('files_that_use_jQuery').wait();
    }
    loadJS('path_to_LABjs', callback);
})();

假设 loadJS 成功加载了 LABjs。就像我说的,当我通过浏览器对此文件运行测试时没有错误,但是通过 PhantomJS 使用 grunt-contrib-jasmine 在我的任何测试完成之前我都会收到以下错误:

TypeError: 'undefined' 不是函数(评估 '$.publish("foo")')

产生的代码如下:

(function($) {
    $.publish('foo');
})(jQuery);

我最初的想法是 PhantomJS 与 LABjs 脚本加载器不兼容,或者代码被“评估”但 PhantomJS 在错误的时间。窥探 grunt-contrib-jasmine、jasmine 和 phantomjs 代码并没有让我有所收获。

感谢任何评论。

【问题讨论】:

    标签: gruntjs jasmine phantomjs grunt-contrib-jasmine


    【解决方案1】:

    我得出的结论是 grunt-contrib-jasmine 不能准确地模拟测试,就好像它们在浏览器中运行一样,这是由于 JavaScript 与 LABjs 的动态加载。该模块在完成加载之前和测试开始之前开始评估页面上的 JavaScript。这可能与 grunt-contrib-jasmine 如何使用 onPageLoad 事件有关,但我不确定具体原因。在浏览器中使用 _SpecRunner.html 文件手动测试不会产生错误。最后,我从 JavaScript 文件中删除了动态加载,并将以另一种方式测试动态加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2018-07-16
      • 2012-05-09
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多