jsdom — параметр не определен при запуске моего теста мокко

Я использую инструменты node js для Visual Studio 2015, и я пишу тесты мокко для моего javascript и jquery, в моей локальной среде я использую карму и хром для запуска тестов, и все работает нормально, но по какой-то причине я хотел использовать jsdom чтобы иметь возможность запускать тесты из узла js без использования кармы или браузера, но один из подключаемых модулей jquery внутри выполняет экземпляр Option (новый вариант) и с помощью jsdom я получаю справочную ошибку Опция не определена из кармы, которую я не знаю не получаю никаких ошибок, ошибка кажется очевидной, карма использует настоящий браузер, в котором определена опция, а 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

Спасибо


person Bluu    schedule 15.09.2016    source источник


Ответы (2)


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

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

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

person gawi    schedule 10.04.2017

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

На момент написания этой статьи PR еще не был объединен, но я обновлю этот комментарий, как только он будет объединен вышестоящим.

person Alex Pearson    schedule 08.03.2017