2016-09-15 116 views
2

我使用節點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 

謝謝

回答

0

後ru在這個同樣的問題中,我注意到,Option構造函數實際上並沒有在jsdom中實現(如您所懷疑的那樣)。請參閱issue #1759 on GitHub。我有submitted a PR that fixes this issue

在撰寫本文時,PR尚未合併,但我將在上游合併後更新此評論。

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