Я тестирую свое приложение React с использованием Jest и Enzyme. Я сталкиваюсь с проблемой, когда у тестируемого компонента есть логика манипуляции DOM c, мои тесты прерываются.
Например, вот хук компонента, который мне нужно протестировать:
componentDidMount() {
document.getElementById('complete').style.display = 'block';
}
При попытке смонтировать этот компонент я столкнулся с приведенной ниже ошибкой:
TypeError: Cannot set property 'display' of undefined
Я погуглил и обнаружил, что мне нужно добавить документ в мои глобалы в шутку. Больно то, что мне также нужно определить каждое такое свойство, используемое в приложении в документе, следующим образом:
const mockUpObject = {
focus: () => null,
style:{
display: ''
}
};
global.document.getElementById = jest.fn(() => mockUpObject);
Зачем нам это нужно, когда по умолчанию jest работает в среде jsdom
и, следовательно, имитирует среда DOM, как если бы вы были в браузере. Есть ли более чистый способ сделать эту работу?