Выбор ответа Junior Тестирование обновлено
Ожидание асинхронного элемента
Вопрос
Компонент загружает список с сервера и потом показывает «Найдено: 3». Тест падает с ошибкой «Unable to find an element». Как исправить?
render(<SearchResults query="чай" />);
expect(screen.getByText('Найдено: 3')).toBeInTheDocument();
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: expect(await screen.findByText('Найдено: 3'))... findBy возвращает промис и повторяет поиск, пока элемент не появится или не выйдет таймаут.
Варианты ответа
expect(await screen.findByText('Найдено: 3'))...правильный ответ- Перед проверкой
await new Promise(r => setTimeout(r, 2000)) - Заменить
getByTextнаqueryByText - Обернуть render в
actбез await
Разбор
findBy возвращает промис и повторяет поиск, пока элемент не появится или не выйдет таймаут. Это ожидание условия, а не фиксированного времени.
- Фиксированный sleep делает тест медленным и всё равно флаки: на медленном CI 2 секунд может не хватить.
queryByвернётnullсразу, данные ещё не пришли.- Синхронный
actне дождётся асинхронной загрузки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.