2017-02-13 2 views
2

Scherz, durch JSDom Ich stelle mir vor, hat document.createRange nicht definiert. Wie kann ich dieses Verhalten überschreiben oder bereitstellen?Mocking document.createRange für Scherz

Die Version, die wir für unsere eigene JSDom + Mokka Setup schrieb (vor allen Tests lief) sieht wie folgt aus:

global.Range = function Range() {}; 

const createContextualFragment = (html) => { 
    const div = document.createElement('div'); 
    div.innerHTML = html; 
    return div.children[0]; // so hokey it's not even funny 
}; 

Range.prototype.createContextualFragment = (html) => createContextualFragment(html); 

// HACK: Polyfil that allows codemirror to render in a JSDOM env. 
global.window.document.createRange = function createRange() { 
    return { 
    setEnd:() => {}, 
    setStart:() => {}, 
    getBoundingClientRect:() => { 
     return { right: 0 }; 
    }, 
    getClientRects:() => [], 
    createContextualFragment, 
    }; 
}; 

Gibt es eine Möglichkeit, dies zu schaffen, zu scherzen?

Antwort

2

Erstellen Sie ein Skript, das das gewünschte Polyfill erstellt - nennen wir es in diesem Beispiel "mypotument.js". Im Scherz Konfiguration Ihres package.json gesetzt setupFiles zu diesem Skript Punkt:

"jest": { 
    "setupFiles": ["raf/polyfill", "./scripts/mockument"] 
} 

Wie oben gezeigt, können Sie auch Modulnamen verwenden können (z raf/polyfill).

Eine süße Sache ist, dass Sie Ihr eigenes Modul für allgemeine Ersteinrichtung zum Testen erstellen und sie über mehrere Komponentenbibliotheken verwenden können, die die Funktionalität benötigen.

"jest": { 
    "setupFiles": ["@nteract/mockument"] 
}, 
+0

funktioniert gut, danke! – scniro