jsdom – 运行我的摩卡testing时没有定义选项

我正在使用节点JS工具的Visual Studio 2015年,我正在写我的JavaScript和jQuery的摩卡testing,在我的本地环境我使用业力和铬运行testing,一切工作正常,但由于某种原因,我想用jsdom能够运行节点js的testing,而不使用业力或浏览器,但其中一个jquery插件内部正在做一个选项(新选项)的实例和使用jsdom我得到的参考错误选项没有从业障定义我不'吨得到任何错误,错误似乎明显业力使用一个真正的浏览器的select是定义和jsdom不是一个真正的浏览器,有什么办法使我的testing工作? 用jsdomdebuggingtesting我发现HTMLOptionElement被附加到由jsdom创build的窗口对象,但也许接口没有完全实现,这就是为什么新的选项不工作。

这是testing文件的代码

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 

谢谢

在遇到同样的问题后,我注意到,Option构造函数实际上并不是在jsdom中实现的(如您所怀疑的那样)。 请参阅GitHub上的问题#1759 。 我已经提交了一个修复这个问题的公关 。

在写这篇文章的时候,公关还没有被合并,但是我会在上游合并之后更新这条评论。

我遇到了同样的问题。 我注意到,如果从jsdom直接指定窗口,则可以从窗口使用Option构造函数。 下面是可以让你访问Option构造函数的代码(但是,我不得不承认这是一个解决方法):

 var jsdom = require('jsdom'); global.document = jsdom.jsdom(undefined); global.window = document.defaultView; global.Option = window.Option; 

我正在使用jsdom的最新实现:9.12.0