Я бы не проверял внутреннее состояние компонента, а скорее то, что это состояние может представлять. Использование состояния - это деталь реализации, и вы должны проверить, правильно ли реализована спецификация, а не как.
В вашем случае я бы использовал следующий подход:
- Вызовите функцию, которая должна установить состояние отправки (нажатие кнопки, отправка формы)
- Проверка правильности обработки отправленного статуса в вашем компоненте (отображается сообщение об успешном завершении?)
Тестирование состояния загрузки вызовов API может быть достигнуто с помощью макетов. Если вы не используете какую-то необычную библиотеку, а просто делаете обычную await apiCall()
, тогда вы можете использовать следующий подход:
- Смоделируйте вызов API (вы, вероятно, уже делаете это)
- Return
Promise()
из макета, который не разрешится
Пример с ферментом:
import { apiCall } from '../api';
jest.mock('../api');
// ...
it('Contains a <Loading /> on loading', () => {
// The promise won't be resolved so the loading state will persist
apiCall.mockReturnValue(new Promise(() => null));
// await act... and wrapper.update() might not be needed
// depending on your implementation
await act(async () => {
wrapper.find(SubmitButton).simulate('click');
});
wrapper.update();
expect(wrapper.find(Loading)).toHaveLength(1);
});