2017-02-13 11 views
2

Jest, через JSDom Я полагаю, не имеет document.createRange. Как я могу перезаписать или обеспечить такое поведение?Mocking document.createRange для шутки

версии мы написали для нашей пользовательского JSDom + мокко установки (побежала перед всеми тестами) выглядит следующим образом:

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, 
    }; 
}; 

Есть ли способ, чтобы обеспечить это шутит?

ответ

2

Создайте сценарий, который устанавливает нужный полиполк - назовем его «mockument.js» для этого примера. В шутку конфигурации вашего package.json установить setupFiles, чтобы указать на этот сценарий:

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

Как показано выше, вы можете также использовать имена модулей (например, raf/polyfill).

sweet вещь об этом заключается в том, что вы можете создать свой собственный модуль для общих начальных настроек для тестирования и использовать их в нескольких библиотеках компонентов, которым нужны функции.

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

хорошо работает, спасибо! – scniro

 Смежные вопросы

  • Нет связанных вопросов^_^