Mocking isola código de dependências externas. APIs, database, timers - substitua por doubles controlados.
Conceitos Principais
Mock Functions
jest.fn() cria function mock. Rastreia calls, args, returns. mockReturnValue, mockImplementation.
Module Mocks
jest.mock("module") substitui módulo inteiro. Auto-mock ou manual mock. __mocks__ directory.
Spies
jest.spyOn(obj, "method") observa método real. Rastreia calls sem substituir.
Timer Mocks
jest.useFakeTimers() controla setTimeout. jest.advanceTimersByTime(1000) avança tempo.
Passo a Passo
- Mock Function: const mockFn = jest.fn(() => 42); expect(mockFn()).toBe(42); expect(mockFn).toHaveBeenCalled();
- Mock Module: jest.mock("./api"); const api = require("./api"); api.fetchUsers.mockResolvedValue([user1, user2]);
- Manual Mock: __mocks__/api.js: export const fetchUsers = jest.fn(). Jest usa automaticamente.
- Mock Timers: jest.useFakeTimers(); setTimeout(callback, 1000); jest.advanceTimersByTime(1000); expect(callback).toHaveBeenCalled();
- Reset Mocks: beforeEach(() => jest.clearAllMocks()). Ou mockFn.mockReset(). Limpa entre testes.
Boas Praticas
Recomendacoes
• Mock apenas boundaries (APIs, DB, filesystem)
• Não mock lógica de negócio
• Use spies quando possível (menos invasivo)
• Reset mocks em beforeEach
• Mock no nível certo (module vs function)
• Documente por que está mockando
Erros Comuns
Evite estes erros
• Mockar tudo (testa mocks, não código)
• Não resetar mocks (state vaza)
• Mocks muito específicos (frágeis)
• Mock de funções puras
• Não verificar mock calls
Checklist
- Mock functions funcionando
- Module mocks configurados
- Timers mockados onde necessário
- Reset mocks em beforeEach
- Apenas boundaries mockadas
- Testes continuam passando