O Jest fornece funcionalidades para criar mocks de funções e módulos:
jest.fn()
: Cria uma função mock que você pode configurar e verificar.jest.mock()
: Substitui módulos inteiros com mocks.jest.fn()
Você pode criar uma função mock com jest.fn()
e definir o comportamento dela:
javascriptCopiar código
const mockFunction = jest.fn().mockReturnValue('valor retornado');
test('a função mock deve retornar o valor correto', () => {
expect(mockFunction()).toBe('valor retornado');
});
Você também pode configurar diferentes comportamentos para a função mock:
javascriptCopiar código
const mockFunction = jest.fn()
.mockReturnValueOnce('primeira chamada')
.mockReturnValueOnce('segunda chamada');
test('a função mock deve retornar valores diferentes para chamadas sucessivas', () => {
expect(mockFunction()).toBe('primeira chamada');
expect(mockFunction()).toBe('segunda chamada');
});
jest.mock()
Para mockar um módulo inteiro, você usa jest.mock()
e pode definir o comportamento das suas exportações:
javascriptCopiar código
// Mock do módulo 'db'
const mockDb = {
getUser: jest.fn().mockResolvedValue({ id: 1, nome: 'Teste' }),
};
// Substitui o módulo real por um mock
jest.mock('../src/services/db', () => mockDb);
test('deve retornar um usuário do banco de dados', async () => {
const res = await request(app).get('/usuarios/1');
expect(res.statusCode).toBe(200);
expect(res.body).toEqual({ id: 1, nome: 'Teste' });
});
Após cada teste, você pode limpar as chamadas e as instâncias dos mocks para evitar interferências entre testes:
javascriptCopiar código
afterEach(() => {
jest.clearAllMocks();
});
Você pode verificar se um mock foi chamado com certos argumentos e quantas vezes:
javascriptCopiar código
const mockFunction = jest.fn();
mockFunction('arg1', 'arg2');
expect(mockFunction).toHaveBeenCalled(); // Verifica se foi chamado
expect(mockFunction).toHaveBeenCalledWith('arg1', 'arg2'); // Verifica argumentos
expect(mockFunction).toHaveBeenCalledTimes(1); // Verifica número de chamadas
Se você estiver lidando com métodos de instância, pode criar mocks para eles também: