2016-09-15 2 views
2

Я использую инструменты узла js для visual studio 2015, и я пишу тесты мокки для своих javascript и jquery, в своей локальной среде я использую карму и хром для запуска тестов и все работает нормально, но по какой-то причине я хотел использовать jsdom, чтобы иметь возможность запускать тесты с узла js без использования кармы или браузера, но один из плагинов jquery внутри делает экземпляр Option (новый вариант) и использует jsdom Я получаю опорную ошибку. Опция не определена из кармы. Я не получаю никаких ошибок. Ошибка кажется очевидной кармой, использует реальный браузер, где параметр определен, а jsdom - не настоящий браузер, есть ли способ сделать мой тест Работа? отладка теста с помощью jsdom. Я вижу, что HTMLOptionElement привязан к объекту window, созданному jsdom, но, возможно, интерфейс не полностью реализован, и поэтому новый параметр не работает.jsdom - опция не определена при запуске моего теста mocha

Вот код тестового файла

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

Я столкнулся с той же проблемой. Я заметил, что конструктор Option доступен из окна, если вы назначаете окно непосредственно из jsdom. Ниже приведен код, который даст вам доступ к Option конструктора (однако, я должен признать, что это временное решение):

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

Я использую последнюю реализацию jsdom: 9.12.0

Смежные вопросы