Выбор ответа Middle Тестирование обновлено
Тест дебаунса без ожидания
Вопрос
Как протестировать поиск с дебаунсом 300 мс, не замедляя тесты реальными ожиданиями?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: jest.useFakeTimers() и jest.advanceTimersByTime(300). Фейковые таймеры подменяют setTimeout, и время двигается командой: тест мгновенный и детерминированный.
Варианты ответа
- Добавить
await new Promise(r => setTimeout(r, 300))в каждый тест jest.useFakeTimers()иjest.advanceTimersByTime(300)правильный ответ- Отключить дебаунс в тестовой сборке через переменную окружения
- Никак: код с таймерами нельзя протестировать в Jest
Разбор
Фейковые таймеры подменяют setTimeout, и время двигается командой: тест мгновенный и детерминированный. Реальное ожидание замедляет набор тестов и делает его нестабильным. Отключать дебаунс значит тестировать не то, что работает в приложении.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.