У меня есть Реагировать компонент со следующим кодом:Test componentWillUnmount() удаляет класс из тела
componentWillUnmount() {
document.body.classList.remove('isPreloaded')
}
Я имею body
тег с isPreloaded
классом, Preloader HTML и стилями для него сначала в index.html (как критические вещи). Когда приложение загружено, компонент Preloader отображается в тело (для пользователя ничего не меняется). И когда данные поступают с сервера, Preloader удаляется. Конечно, я должен удалить класс isPreloaded
, так как он делает тело необратимым.
Вышеприведенное описание напрямую не связано с моим вопросом, но я решил добавить его, чтобы исключить такие комментарии, как «Это плохая практика» или подобное.
Так что я хочу протестировать это поведение. Чтобы гарантировать, что это работает, как ожидается, я должен сделать этот компонент внутри <body>
с классом isPreloaded
и сохранить его в переменной, пусть это будет container
. Тогда я должен проверить, что этот класс существует в container
. И во втором тесте я должен отключить компонент из контейнера и проверить, что класс исчез.
Это примерно то, что я хочу добиться:
describe('<Preloader />',() => {
const container = mount(<body className='isPreloaded'><Preloader /></body>)
it('should be rendered with `isPreloaded` class',() => {
expect(container.find('isPreloaded').length).toBe(1)
})
ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(container).childNode)
it('should remove `isPreloaded` class from body when unmounted',() => {
expect(container.find('.isPreloaded').length).toBe(0)
})
})
Но это не работает. Первое утверждение возвращает 0 вместо 1 и поэтому терпит неудачу. Второй один выдает следующее сообщение об ошибке:
Invariant Violation: findDOMNode was called on an unmounted component.
среагировать версию ?? – Codesingh
@Codesingh 15.4.1 –