Выбор ответа Senior Тестирование обновлено
Фейковые таймеры и user-event
Вопрос
Тест поиска с debounce использует vi.useFakeTimers(). После этого await user.type(...) зависает. Как исправить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: userEvent.setup({ advanceTimers: vi.advanceTimersByTime }). user-event между действиями делает задержки через таймеры.
Варианты ответа
- Отключить фейковые таймеры: они несовместимы с React 19 и
act - Использовать
fireEventвместоuser-event: с фейковыми таймерами иначе нельзя - Обернуть
user.typeвactизreact-dom/test-utils userEvent.setup({ advanceTimers: vi.advanceTimersByTime })правильный ответ
Разбор
user-event между действиями делает задержки через таймеры. С фейковыми часами они никогда не истекают, если библиотеке не сказать, как двигать время. Опция advanceTimers решает это. Дальше vi.advanceTimersByTime(300) прокручивает debounce.
- Фейковые таймеры с React работают.
fireEventтоже обходной путь, но не единственный и не лучший.react-dom/test-utilsв React 19 больше не содержитact, и проблема не вact.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.