Выбор ответа Junior Jest и Vitest обновлено

Тест с задержкой

Вопрос

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

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

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

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

Коротко

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

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

  1. vi.useFakeTimers() и vi.advanceTimersByTime(300)правильный ответ
  2. await new Promise(r => setTimeout(r, 300)) в тесте
  3. Поставить таймаут теста больше 300 мс в конфиге раннера
  4. Пропускать такие тесты через it.skip на CI

Разбор

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

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

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