我正在为visual studio 2015使用node js工具,我正在为我的javascript和jquery编写mocha测试,在我的本地环境中,我使用karma和chrome运行测试,一切正常,但出于某种原因,我想使用jsdom从节点js运行测试,而不使用karma或浏览器,但是jquery插件的一个内部正在执行option(new option)的实例,使用jsdom我得到了引用错误。选项不是从karma定义的我没有得到任何错误,错误似乎很明显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
谢谢你
最佳答案
我遇到了同样的问题。我注意到,如果直接从jsdom分配窗口,则可以从window获得Option
构造函数。下面是允许您访问Option
构造函数的代码(但是,我必须承认这是一个解决方法):
var jsdom = require('jsdom');
global.document = jsdom.jsdom(undefined);
global.window = document.defaultView;
global.Option = window.Option;
我正在使用jsdom的最新实现:9.12.0
关于node.js - jsdom-运行我的 Mocha 测试时未定义选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39501589/