我正在为visual studio 2015使用节点js工具,我正在为我的javascript和jquery编写mocha测试,在我的本地环境中我使用karma和chrome来运行测试,一切都运行正常但出于某种原因我想要使用jsdom能够从节点js运行测试而不使用karma或浏览器,但内部的一个jquery插件正在执行Option(新选项)的实例并使用jsdom我得到引用错误选项未定义来自karma我没有得到任何错误,错误似乎很明显业力是使用真正的浏览器定义选项,jsdom不是真正的浏览器,有没有办法让我的测试工作?使用jsdom调试测试我看到HTMLOptionElement附加到jsdom创建的窗口对象,但可能接口没有完全实现,这就是新选项无效的原因。
以下是测试文件的代码
if (global.window) {
window.jQuery = window.$ = require('jquery');
} else {
require('jsdom-global')();
global.jQuery = global.$ = require("jquery");
}
var chai = require('chai');
var assert = chai.assert;
var expect = chai.expect;
var should = chai.should();
chai.use(require('chai-jquery'));
chai.use(require('chai-spies'));
var sourceFile = require('path_to_js_file');
describe('Test', () => {
it('this is not passing', () => {
var x = new Option;
expect(1).to.equal(1);
});
it('this is passing', () => {
document.body.innerHTML = '<input id="name"/>';
sourceFile.init();
expect($("#name").is(":focus")).to.equal(true);
});
});
我的源文件看起来像这样
function init () {
$('#name').focus();
}
module.exports = {
init
};
我得到的错误是:
ReferenceError: Option is not defined
谢谢
答案 0 :(得分:0)
在遇到同样的问题之后,我注意到Option构造函数实际上并没有在jsdom中实现(如你所怀疑的那样)。见issue #1759 on GitHub。我有submitted a PR that fixes this issue。
在撰写本文时,PR尚未合并,但一旦合并到上游,我就会更新此评论。
答案 1 :(得分:0)
我遇到了同样的问题。我注意到,如果直接从jsdom分配窗口,则Option
构造函数可以在窗口中使用。以下代码可让您访问Option
构造函数(但是,我必须承认它是一种解决方法):
var jsdom = require('jsdom');
global.document = jsdom.jsdom(undefined);
global.window = document.defaultView;
global.Option = window.Option;
我正在使用jsdom的最新实现:9.12.0