我正在使用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代码并没有把我带到任何地方。
任何评论都表示赞赏。
答案 0 :(得分:0)
我得出的结论是,由于JavaScript与LABjs的动态加载,grunt-contrib-jasmine并不能准确地模仿测试,就好像它们是在浏览器中运行一样。该模块在开始加载之前和测试开始之前开始评估页面上的JavaScript。这可能与grunt-contrib-jasmine如何使用onPageLoad事件有关,但我不确定具体原因。在浏览器中使用_SpecRunner.html文件手动测试不会产生任何错误。最后,我从JavaScript文件中删除了动态加载,并将以另一种方式测试动态加载。