Вопрос проверяет понимание принципов использования моков в тестировании для изоляции тестируемого кода от внешних зависимостей.
Моки — это тестовые двойники, которые имитируют поведение реальных объектов. Они используются в юнит-тестировании для изоляции тестируемого кода от его зависимостей. Основная цель моков — заменить объекты, которые делают тесты медленными, нестабильными или трудновоспроизводимыми.
// Функция, которая отправляет email через внешний сервис
function sendWelcomeEmail(userId, emailService) {
const user = getUser(userId);
return emailService.send(user.email, 'Welcome!');
}
// Тест с моком emailService
const mockEmailService = { send: jest.fn() };
sendWelcomeEmail(1, mockEmailService);
expect(mockEmailService.send).toHaveBeenCalledWith('user@example.com', 'Welcome!');Не заменяйте моками простые объекты без логики (DTO, value objects) или объекты, которые являются частью тестируемого модуля. Также избегайте моков для стабильных и быстрых зависимостей, таких как математические вычисления.
Вывод: Моки следует применять для изоляции тестируемого кода от внешних, нестабильных или медленных зависимостей. Это делает тесты быстрее, надежнее и проще для понимания.