Вопрос проверяет понимание того, что большое количество моков в одном unit-тесте сигнализирует о проблемах архитектуры и связанности кода.
Когда в одном unit-тесте приходится мокать пять, десять или больше модулей, это почти всегда сигнал о проблемах в дизайне кода, а не о качестве самого теста. Мок — это заглушка, подменяющая реальную зависимость, и каждый мок означает, что тестируемый класс напрямую связан с ещё одним внешним компонентом.
Класс, который сам ходит в базу, отправляет письма и пишет в лог, требует моков для всего сразу. Если разбить его на сервисы и внедрять зависимости через конструктор, тест станет проще.
// Плохо: класс делает всё сам
class OrderService {
create(order) {
db.save(order);
mailer.send(order.email);
logger.log('created');
cache.invalidate(order.id);
}
}
// Лучше: зависимости внедряются, ответственность разделена
class OrderService {
constructor(repo, notifier) {
this.repo = repo;
this.notifier = notifier;
}
create(order) {
this.repo.save(order);
this.notifier.notify(order);
}
}
Итог: множество моков — это не проблема теста, а подсказка пересмотреть архитектуру. Если класс требует десяток заглушек, его стоит декомпозировать, и тогда тесты станут короче, надёжнее и понятнее.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию