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

Тест дебаунса без ожидания

Вопрос

Как протестировать поиск с дебаунсом 300 мс, не замедляя тесты реальными ожиданиями?

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

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

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

Коротко

Правильный ответ: jest.useFakeTimers() и jest.advanceTimersByTime(300). Фейковые таймеры подменяют setTimeout, и время двигается командой: тест мгновенный и детерминированный.

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

  1. Добавить await new Promise(r => setTimeout(r, 300)) в каждый тест
  2. jest.useFakeTimers() и jest.advanceTimersByTime(300)правильный ответ
  3. Отключить дебаунс в тестовой сборке через переменную окружения
  4. Никак: код с таймерами нельзя протестировать в Jest

Разбор

Фейковые таймеры подменяют setTimeout, и время двигается командой: тест мгновенный и детерминированный. Реальное ожидание замедляет набор тестов и делает его нестабильным. Отключать дебаунс значит тестировать не то, что работает в приложении.

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

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