jsdom - 运行我的摩卡测试时未定义选项
问题描述:
我使用节点js工具进行visual studio 2015,我正在为本地环境中的javascript和jquery编写摩卡测试,我正在使用karma和chrome运行测试和一切工作正常,但由于某种原因,我想用jsdom能够运行节点js的测试,而不使用业力或浏览器,但其中一个jquery插件内部正在做一个选项(新选项)的实例,并使用jsdom我得到的参考错误选项没有从业障定义我没有得到任何错误,错误似乎明显业力是使用一个真正的浏览器,其中的选项定义和jsdom不是一个真正的浏览器,有什么办法让我的测试工作?使用jsdom调试测试我发现HTMLOptionElement附加到由jsdom创建的窗口对象,但可能接口未完全实现,这就是新选项无法使用的原因。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
谢谢
答
后ru在这个同样的问题中,我注意到,Option构造函数实际上并没有在jsdom中实现(如您所怀疑的那样)。请参阅issue #1759 on GitHub。我有submitted a PR that fixes this issue。
在撰写本文时,PR尚未合并,但我将在上游合并后更新此评论。
答
我遇到了同样的问题。我注意到,如果直接从jsdom分配窗口,则可以从窗口获得Option
构造函数。下面是会给你访问Option
构造函数的代码(但是,我不得不承认这是一个解决方法):
var jsdom = require('jsdom');
global.document = jsdom.jsdom(undefined);
global.window = document.defaultView;
global.Option = window.Option;
我使用的是最新执行jsdom的:9.12.0