Не обращая внимания на использование этого вообще, как я могу протестировать такую функцию:
export const toggleClass = (elementDOM, className) => {
if (elementDOM.classList.contains(className)) {
elementDOM.classList.remove(className);
} else {
elementDOM.classList.add(className);
}
};
Конечно, я могу создать элемент DOM и проверять свойство className после каждого вызова toggleClass, но как я могу проверить, был ли вызван classList.ad/remove? Я пробовал устанавливать такие фиктивные функции:
const addSpy = jest.fn();
const removeSpy = jest.fn();
Element.prototype.classList = {
add: addSpy,
remove: removeSpy
};
но это просто дает следующее сообщение об ошибке:
TypeError: Cannot read property 'classList' of undefined
at Node.get [as classList] (node_modules/jest-environment-jsdom/node_modules/jsdom/lib/jsdom/living/generated/Element.js:450:46)
at Object.<anonymous> (app/Resources/scripts/helper/utils.test.js:23:37)
at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
at process._tickCallback (internal/process/next_tick.js:109:7)
Мне не хватает понимания Jest или концепции тестирования, или это просто невозможно?
{ classList: { contains: jest.fn(), remove: jest.fn(), add: jest.fn() } }
- person Or B   schedule 28.08.2017