Использование setState
опасно, независимо от используемой библиотеки тестирования.
- Это зависит от деталей реализации (скажем, имен свойств внутри состояния), поэтому поддерживать тесты становится намного сложнее - больше тестов менять, легко ломать тест, когда приложение в порядке и т. Д.
- Вы не можете вызывать это после преобразования компонента класса в функциональный с помощью ловушек. Так что вы еще больше зависите от деталей реализации.
- И, наконец, прямые манипуляции с государством могут закончиться состоянием, которого вы никогда не получите в реальном мире. Это означает, что ваш компонент будет сломан, потому что невозможно достичь какого-то состояния, но ваши тесты с прямой инициализацией будут в порядке.
Так что тебе лучше делать? Предоставьте реквизиты, измените реквизиты, вызовите реквизиты (wrapper.find('button').filter(button => button.text() === 'Cancel').props().onClick()
для фермента, fireEvent.click(getByText(/Cancel/i))
для RTL) и проверьте, что отображается.
Таким образом, ваши тесты будут короче, наиболее актуальными и потребуют меньше изменений после обновления тестируемого компонента.