Objeto simulado usado en test de desarrollo para no depender de servicios reales.
Un mock es un objeto simulado que imita el comportamiento de dependencias reales en tests. A diferencia de los stubs (que solo devuelven valores fijos), los mocks permiten: - Verificar que se llamaron ciertos métodos - Comprobar los argumentos pasados - Controlar el número de invocaciones - Simular diferentes escenarios (éxito, error, timeout) Se usan para aislar el código bajo prueba de sus dependencias externas como APIs, bases de datos o servicios.
// userService.test.ts import { UserService } from './userService'; import { EmailService } from './emailService'; // Mock manual const mockEmailService = { sendWelcomeEmail: jest.fn().mockResolvedValue(true), sendPasswordReset: jest.fn() }; // Con Jest jest.mock('./emailService'); const MockedEmailService = EmailService as jest.Mocked<typeof EmailService>; describe('UserService', () => { let userService: UserService; beforeEach(() => { jest.clearAllMocks(); userService = new UserService(mockEmailService); }); it('envía email de bienvenida al crear usuario', async () => { await userService.createUser({ email: 'test@test.com' }); // Verificar que se llamó el mock expect(mockEmailService.sendWelcomeEmail).toHaveBeenCalledTimes(1); expect(mockEmailService.sendWelcomeEmail).toHaveBeenCalledWith('test@test.com'); }); it('maneja error de envío de email', async () => { mockEmailService.sendWelcomeEmail.mockRejectedValueOnce(new Error('SMTP error')); await expect(userService.createUser({ email: 'test@test.com' })) .rejects.toThrow('Error al enviar email'); }); });