#reactjs #testing #react-testing-library
#reactjs #тестирование #react-testing-library
Вопрос:
У меня есть компонент React с полем ввода и кнопкой, отключенной в самом начале. Состояние этой кнопки (отключено) изменяется, если ввод, предоставляемый пользователем в поле ввода, проверяется API, который вызывается после ввода чего-либо в поле ввода.
Я тестирую, предоставляя допустимый ввод, но для этого нужно дождаться завершения вызова API, поэтому в основном я хочу проверить, включена ли кнопка при предоставлении допустимого ввода или нет в моем тесте.
Я делаю это следующим кодом:
userEvent.type(getByRole("textbox"), "HELLO");
await waitFor(() => expect(getByTestId("my-btn")).not.toBeDisabled());
Но он не работает даже с допустимым вводом
Комментарии:
1. Как вы предоставляете допустимый ввод? Не могли бы вы добавить полный код вашего теста?
2. Как вы разрешаете HTTP-запрос?
Ответ №1:
Вы можете увеличить время waitFor
ожидания, как описано в документе:
await waitFor(() => expect(getByTestId("my-btn")).not.toBeDisabled(), {
timeout: 5000,
});
После 5000 вам, вероятно, потребуется также увеличить время ожидания шутки.
Ответ №2:
Для меня ожидание исчезновения отключенного состояния не работает. Обычно я жду, пока в DOM произойдет что-то еще.
Возможно, используя ввод, который вы ввели…
userEvent.type(getByRole("textbox"), "HELLO");
expect(await expect(screen.getByDisplayValue('HELLO')).toBeInTheDocument());
expect(getByTestId("my-btn")).not.toBeDisabled()
Кроме того, поскольку вы ожидаете ответа API, вы можете захотеть имитировать ответ этого вызова на что-то, что удалит ваше отключенное состояние.