Pular para o conteúdo
Tecnologia

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

  1. Mock Function: const mockFn = jest.fn(() => 42); expect(mockFn()).toBe(42); expect(mockFn).toHaveBeenCalled();
  2. Mock Module: jest.mock("./api"); const api = require("./api"); api.fetchUsers.mockResolvedValue([user1, user2]);
  3. Manual Mock: __mocks__/api.js: export const fetchUsers = jest.fn(). Jest usa automaticamente.
  4. Mock Timers: jest.useFakeTimers(); setTimeout(callback, 1000); jest.advanceTimersByTime(1000); expect(callback).toHaveBeenCalled();
  5. 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