Spott `Dokument` im Scherz

Ich versuche, tests schreiben, für meine web-Komponenten Projekte im Scherz. Ich verwende bereits babel mit es2015 voreingestellt. Ich bin vor ein Problem beim laden der js-Datei. Ich habe ein Stück code, wo document Objekt hat einen currentScript Objekt. Aber im test-Kontext ist es null. Also dachte ich mir der Spott gleich. Aber jest.fn() ist nicht wirklich zu helfen. Wie kann ich damit umgehen?

Stück code, wo den Scherz nicht.

var currentScriptElement = document._currentScript || document.currentScript;
var importDoc = currentScriptElement.ownerDocument;

Test case, die 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();
  });
});

Folgenden wird der Fehler ausgelöst, indem Sie den Scherz

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 habe einige Globale vars und versuchte, Sie zu verspotten, wie folgende

__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 versucht, obigen code ohne __dev__. Auch durch die Einstellung Dokument als global.

Haben Sie versucht, mit global.document?
ja..ich habe das ausprobiert..kein Glück..
Also habe ich im Grunde verwendet, jsdom wie const jsdom = require('jsdom'); const documentHTML = '<!doctype html><html><body><div id="root"></div></body></html>'; global.document = jsdom.jsdom(documentHTML); Und danach habe ich eine Wende auf alles, was ich will, um das Dokument und dessen zur Verfügung, die in den tests.
eigentlich problem hier ist, jsdom ist sehr einfach und nicht webcomponents API. Jedenfalls vorübergehend behoben, es als pro meine Antwort.

InformationsquelleAutor thecodejack | 2016-12-12

Schreibe einen Kommentar