Моки в unit-тестах
Вопрос
Расскажите, когда вы используете моки в Jest или Vitest и как не перестараться.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Мокаю границы: сеть, время, случайность, внешние сервисы
Инструменты: fn, spyOn, mock модуля, фейковые таймеры
Сброс моков между тестами (clearMocks, restoreMocks)
Не мокаю тестируемый код и простые зависимости, иначе тест проверяет моки
Проверяю поведение (результат, вызовы с аргументами), а не детали реализации
Что могут спросить следом
- Чем spyOn отличается от fn?
- Как замокать fetch?
Разбор
Образцовый ответ: «Мокаю то, что делает тест медленным или недетерминированным: сеть, время, случайность, внешние сервисы. Для функций беру vi.fn, для методов объектов spyOn, модули подменяю vi.mock, таймеры фейковыми. В конфиге включаю restoreMocks, чтобы моки не протекали между тестами. Чего избегаю: мокать всё подряд, вплоть до соседних функций того же модуля. Тогда тест проверяет, что код вызывает свои же моки, и при рефакторинге ломается без причины. Проверяю наблюдаемое поведение: что вернулось и с какими аргументами ушёл запрос во внешний мир»).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.