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

时间:2014-02-28 21:04:11

标签: gruntjs jasmine phantomjs grunt-contrib-jasmine

我正在使用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代码并没有把我带到任何地方。

任何评论都表示赞赏。

1 个答案:

答案 0 :(得分:0)

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