Я пытаюсь написать тесты для моих проектов веб-компонентов в шутку. Я уже использую babel с предустановкой es2015. Я сталкиваюсь с проблемой при загрузке js-файла. У меня есть следующий код, где document
объект имеет currentScript
объект. Но в тестовом контексте это null
. Поэтому я думал о насмешливости. Но jest.fn()
на самом деле не помогает. Как я могу справиться с этой проблемой?Издевательская `document` в шутке
Кусок кода, в котором шутка не работает.
var currentScriptElement = document._currentScript || document.currentScript;
var importDoc = currentScriptElement.ownerDocument;
Тестовый чехол Я написали. component.test.js
import * as Component from './sample-component.js';
describe('component test', function() {
it('check instance', function() {
console.log(Component);
expect(Component).toBeDefined();
});
});
Ниже ошибка брошена шутя
Test suite failed to run
TypeError: Cannot read property 'ownerDocument' of null
at src/components/sample-component/sample-component.js:4:39
Update: Согласно предложению от Andreas Köberle, я даже добавил глобальный вар и попытался насмешливо, как следующий
__DEV__.document.currentScript = document._currentScript = {
ownerDocument: ''
};
__DEV__.window = {
document: __DEV__.document
}
__DEV__.document.registerElement = jest.fn();
import * as Component from './arc-sample-component.js';
describe('component test', function() {
it('check instance', function() {
console.log(Component);
expect(Component).toBeDefined();
});
});
Но не повезло
Обновление: Я даже пробовал код выше __dev__
. Также, установив документ как глобальный.
Вы пытались использовать 'global.document'? –
Да .. я пробовал это..не удачи .. – thecodejack
Так что я в основном использовал jsdom как 'const jsdom = require ('jsdom'); const documentHTML = '
'; global.document = jsdom.jsdom (documentHTML); ' И после этого я придерживаюсь всего, что хочу, для документа и его доступных в моих тестах. –