0

我正在使用 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 代码并没有让我有所收获。

任何评论表示赞赏。

4

1 回答 1

0

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

于 2014-03-25T16:42:37.523 回答