jsdom - 运行我的mocha测试时未定义选项

时间:2016-09-15 00:35:32

标签: node.js mocha jsdom

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

谢谢

2 个答案:

答案 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