Ответ вслух Middle Jest и Vitest обновлено

Моки в unit-тестах

Вопрос

Расскажите, когда вы используете моки в Jest или Vitest и как не перестараться.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Образцовый ответ: «Мокаю то, что делает тест медленным или недетерминированным: сеть, время, случайность, внешние сервисы. Для функций беру vi.fn, для методов объектов spyOn, модули подменяю vi.mock, таймеры фейковыми.

Что должно прозвучать в ответе

  • Мокаю границы: сеть, время, случайность, внешние сервисы

  • Инструменты: fn, spyOn, mock модуля, фейковые таймеры

  • Сброс моков между тестами (clearMocks, restoreMocks)

  • Не мокаю тестируемый код и простые зависимости, иначе тест проверяет моки

  • Проверяю поведение (результат, вызовы с аргументами), а не детали реализации

Что могут спросить следом

  • Чем spyOn отличается от fn?
  • Как замокать fetch?

Разбор

Образцовый ответ: «Мокаю то, что делает тест медленным или недетерминированным: сеть, время, случайность, внешние сервисы. Для функций беру vi.fn, для методов объектов spyOn, модули подменяю vi.mock, таймеры фейковыми. В конфиге включаю restoreMocks, чтобы моки не протекали между тестами. Чего избегаю: мокать всё подряд, вплоть до соседних функций того же модуля. Тогда тест проверяет, что код вызывает свои же моки, и при рефакторинге ломается без причины. Проверяю наблюдаемое поведение: что вернулось и с какими аргументами ушёл запрос во внешний мир»).

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

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