Ich versuche, Tests für meine Web-Komponenten-Projekte im Scherz zu schreiben. Ich benutze bereits Babel mit es2015 Preset. Ich habe Probleme beim Laden der Js-Datei. Ich habe folgendes Stück Code, wo document
Objekt hat currentScript
Objekt. Aber im Testkontext ist es null
. Also dachte ich daran, dasselbe zu verspotten. Aber jest.fn()
ist nicht wirklich in der gleichen Hilfe. Wie kann ich mit diesem Problem umgehen?Mocking `Dokument` im Scherz
Code, in dem Scherz fehlschlägt.
var currentScriptElement = document._currentScript || document.currentScript;
var importDoc = currentScriptElement.ownerDocument;
Testfall, den ich geschrieben habe. component.test.js
import * as Component from './sample-component.js';
describe('component test', function() {
it('check instance', function() {
console.log(Component);
expect(Component).toBeDefined();
});
});
Nach der durch Scherz geworfen Fehler
Test suite failed to run
TypeError: Cannot read property 'ownerDocument' of null
at src/components/sample-component/sample-component.js:4:39
Update: Gemäß Vorschlag von Andreas Köberle, ich auch global var hinzugefügt und versucht spöttisch wie folgt
__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();
});
});
Aber kein Glück
Update: Ich habe sogar oben Code ohne __dev__
versucht. Außerdem durch Festlegen des Dokuments als global.
Haben Sie versucht, 'global.document' zu verwenden? –
ja..ich habe versucht, dass .. kein Glück .. – thecodejack
Also ich im Grunde genommen jsdom wie 'const jsdom = erfordern ('jsdom'); const documentHTML = '
'; global.document = jsdom.jsdom (DokumentHTML); ' Und danach klebe ich alles auf, was ich möchte, um das Dokument und seine verfügbaren in meinen Tests. –