Выбор ответа Middle Тестирование обновлено

Действие внутри waitFor

Вопрос

Что не так с этим тестом?

await waitFor(async () => {
  await user.click(screen.getByRole('button', { name: 'Загрузить ещё' }));
  expect(screen.getAllByRole('listitem')).toHaveLength(20);
});

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Колбэк waitFor повторяется, и клик выполнится несколько раз. waitFor повторяет колбэк, пока тот не перестанет бросать ошибку.

Варианты ответа

  1. waitFor нельзя использовать с user-event, только с fireEvent
  2. Колбэк waitFor повторяется, и клик выполнится несколько разправильный ответ
  3. waitFor ждёт ровно 1 секунду, а запрос может идти дольше
  4. Нужно вернуть промис из колбэка через return, иначе он не ждёт

Разбор

waitFor повторяет колбэк, пока тот не перестанет бросать ошибку. Побочное действие внутри повторится. Правильно: await user.click(...) до waitFor, а внутри только expect.

  • Совместимость с user-event тут ни при чём.
  • waitFor ждёт до успеха или до таймаута, а не фиксированное время.
  • Асинхронный колбэк waitFor поддерживает, но это не решает проблему повторов.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.