我正在为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/

10-13 02:13