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

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