Gruntjs Jasmine测试之间的差异:浏览器与PhamtomJS

Gruntjs Jasmine测试之间的差异:浏览器与PhamtomJS,gruntjs,jasmine,phantomjs,grunt-contrib-jasmine,Gruntjs,Jasmine,Phantomjs,Grunt Contrib Jasmine,我正在使用grunt contrib jasmine插件运行BDD测试。当我生成_SpecRunner.html并通过Chrome运行测试时,一切都很好。当我通过PhantomJS运行测试时,我收到错误消息,表明jQuery没有加载 我正在测试的文件使用LABjs加载jQuery、jQueryUI和其他一些依赖它们的文件。此标记将放置在第三方站点上,因此加载jQuery需要此脚本 (function(){ function callback() { $LAB

我正在使用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代码并没有让我得到任何东西


如有任何评论,我们将不胜感激

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