我正在测试jQuery插件。我发现了这个问题:How to run Jasmine tests on Node.js from command line?但是当我跑步时:
node_modules/jasmine-node/bin/jasmine-node --verbose --junitreport --noColor spec
我收到了$ $未定义的错误。我怎么能包含jQuery? (现在我只测试不与dom交互的实用程序)。
答案 0 :(得分:3)
您首先需要创建一个jQuery可以执行其操作的DOM。 您应该将其设置为全局变量,因为您可能正在访问窗口元素上的jQuery(或$)。
首先,将jquery和jsdom添加到package.json文件中,例如:
"dependencies": {
"jquery": "*"
},
"devDependencies": {
"jsdom": "*"
}
运行npm install
以安装刚刚添加的新依赖项。
然后,在spec文件的顶部,执行以下操作:
var jsdom = require("jsdom").jsdom;
global.window = jsdom().parentWindow;
global.jQuery = global.$ = require("jquery")(window);
这使用jsdom创建一个窗口元素,让jquery知道要做什么。您现在应该可以在规范中访问jQuery
和$
。
答案 1 :(得分:0)
通过尝试和错误,我想出了这个代码,它可以在jasmine-node规范文件中使用jQuery和jsdom:
if (typeof window === 'undefined') {
var jsdom = require("jsdom");
global.document = jsdom.jsdom();
global.window = global.document.parentWindow;
var navigator = {userAgent: "node-js", platform: "Linux i686"};
global.window.navigator = global.navigator = navigator;
navigator.platform = "Linux i686";
global.jQuery = global.$ = require("jquery");
}
答案 2 :(得分:0)
使用jsdom v7.2.2和node v4.2.4。我让它使用以下代码:
var jsdom = require("jsdom").jsdom;
global.window = jsdom().defaultView;
global.jQuery = global.$ = require("jquery");
var myModuleThatReliesOnJquery = require("./myModuleThatReliesOnJquery.js");