2017-03-07 6 views
0

Ich habe ein Problem einige Javascript testen, die window.DOMParser verwendetTesten Sie Javascript mit Mokka und JSDOM

const stripLink = (url) => { 
    const parser = new DOMParser() 
    const link = parser.parseFromString(unescape(url), 
'text/html').querySelector('a') 
    return link ? link.getAttribute('href') : url 
} 

Wenn in Mokka getestet es eine Warnung gibt.

node:22883) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: DOMParser is not defined 

Ich vermute, das ist, weil es keinen DOMParser in Knoten gibt. Wie komme ich hier zurecht? Ich habe verschiedene Dinge ausprobiert, wie

var DOMParser = require('xmldom').DOMParser 
sinon.stub(window, 'DOMParser', DOMParser) 

Denken, dass, wenn ich window.DOMParser mit xmldom Parser für die Tests ersetzen sollte es funktionieren, aber es funktioniert nicht.

Irgendeine Idee, wie man das funktioniert?

Antwort

0

Ersetzen

const parser = new DOMParser() 

Mit

const parser = new window.DOMParser() 

hat den Trick. Scheint, dass JSDOM bereits DOMParser unterstützt, aber Sie müssen window.DOMParser() explizit in Ihrem Code aufrufen, damit es funktioniert.

1

Es gibt eine andere ähnliche Problemumgehung. Sie müssen die folgenden Pakete installieren:

setup.js

require('jsdom-global')() 
global.DOMParser = window.DOMParser 

:

npm install jsdom jsdom-global --save-dev 

Dann stellen Sie sicher, den folgenden Code in einer setup.js Datei oder vor den ersten Testfahrten laufen Auf diese Weise können Sie DOMParser in Ihren src s-Dateien aufrufen, ohne sie aus einem globalen Objekt zu extrahieren.

Dateistruktur

. 
├── src 
└── tests 
   ├── setup.js 
   └── some-test.spec.js 
Verwandte Themen