Javascript 如何使用jasmine和node从命令行测试jQuery插件?

Javascript 如何使用jasmine和node从命令行测试jQuery插件?,javascript,jquery,node.js,jasmine,Javascript,Jquery,Node.js,Jasmine,我有我正在测试的jQuery插件。我发现了这个问题:但当我跑步时: node_modules/jasmine-node/bin/jasmine-node --verbose --junitreport --noColor spec 我得到了未定义$的错误。如何包含jQuery?(现在我只测试不与dom交互的实用程序)。您首先需要创建一个dom,jQuery可以在其上执行操作。 您应该将其设置为一个全局变量,因为您可能正在访问window元素上的jQuery(或$) 首先,将jquery和jsd

我有我正在测试的jQuery插件。我发现了这个问题:但当我跑步时:

node_modules/jasmine-node/bin/jasmine-node --verbose --junitreport --noColor spec

我得到了未定义$的错误。如何包含jQuery?(现在我只测试不与dom交互的实用程序)。

您首先需要创建一个dom,jQuery可以在其上执行操作。 您应该将其设置为一个全局变量,因为您可能正在访问window元素上的jQuery(或$)

首先,将jquery和jsdom添加到package.json文件中,例如:

  "dependencies": {
    "jquery": "*"
  },
  "devDependencies": {
    "jsdom": "*"
  }
运行
npm install
安装您刚才添加的新依赖项

然后,在等级库文件的顶部执行以下操作:

var jsdom = require("jsdom").jsdom;
global.window = jsdom().parentWindow;
global.jQuery = global.$ = require("jquery")(window);

这将使用jsdom创建一个窗口元素,并让jquery知道要执行的操作。您现在应该能够访问规范中的
jQuery
$

通过反复尝试,我在jasmine节点规范文件中找到了使用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");
}

使用jsdom v7.2.2和节点v4.2.4。我让它与以下代码一起工作:

var jsdom = require("jsdom").jsdom;
global.window = jsdom().defaultView;
global.jQuery = global.$ = require("jquery");
var myModuleThatReliesOnJquery = require("./myModuleThatReliesOnJquery.js");

我也很难让它工作。我发现(通过转到jsdomgithub页面:)可以做到以下几点

安装以下两个软件包(按照Farid的建议):

然后在等级库(测试)文件的顶部键入以下内容:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM(`<!DOCTYPE html>`);

global.jQuery = global.$ = require("jquery")(window); 
global.window = window;
global.document = window.window;
现在,您只需键入以下内容即可运行测试:

npm run test

或者干脆
npm测试

您找到解决此问题的方法了吗?不确定这是否是推荐的解决方案,但您可以将jquery的一个版本添加到同一个spec文件夹中,该文件需要以
helper.js
结尾。例如jquery-helper.js-此文件将在测试运行之前加载。这不起作用,我没有获得jquery函数,但jquery和$是对象,没有$.fn。
{
  "dependencies": {
    "jquery": "^3.2.1"
  },
  "devDependencies": {
    "jasmine-node": "^1.14.5",
    "jsdom": "^10.1.0"
  },
  "scripts": {
    "test": "jasmine-node --verbose --color spec/*"
  }
}
npm run test