Article image
Eric Ricielle
Eric Ricielle19/02/2023 16:11
Compartilhe

Diferença entre Jest.fn e Jest.mock

  • #JavaScript

Devido a quantidade de dúvidas relacionadas ao último bootcamp que concluí, relacionado ao jest.fn e jest.mock, resolvi postar este artigo. Espero que seja útil.

jest.fn() é um método que cria uma função simulada (ou "mock function") que pode ser usada em testes para substituir uma função real. A função simulada registra todos os argumentos passados para ela, bem como informações sobre como e quando foi chamada. Isso pode ser útil em testes que verificam se uma determinada função foi chamada corretamente.

Por exemplo, imagine que você tenha uma função add que recebe dois números e retorna a soma deles:

function add(a, b) {
return a + b;
}

Você pode criar uma função jest simulada para substituir a função add original:

const add = jest.fn();

A partir daí, você pode definir o comportamento da função simulada:

add.mockReturnValue(10);

Isso fará com que a função simulada add sempre retorne 10 quando for chamada. Você pode então chamar a função simulada em seus testes e verificar como ela é chamada:

test('add function returns the correct result', () => {
expect(add(2, 3)).toBe(10);
expect(add).toHaveBeenCalledWith(2, 3);
});

jest.mock() é um método que permite simular um módulo inteiro. Ele é usado para substituir um módulo real com um módulo jest simulado, permitindo que você controle o comportamento do módulo simulado durante os testes.

Por exemplo, imagine que você tenha um módulo math.js que contém uma função add:

// math.js
function add(a, b) {
return a + b;
}

module.exports = { add };

Você pode criar um módulo jest simulado para substituir o módulo math.js original:

jest.mock('./math');

A partir daí, você pode definir o comportamento das funções simuladas do módulo:

const math = require('./math');
math.add.mockReturnValue(10);

Isso fará com que a função simulada add sempre retorne 10 quando for chamada. Você pode então chamar a função simulada em seus testes e verificar como ela é chamada:

test('math.add function returns the correct result', () => {
const math = require('./math');
expect(math.add(2, 3)).toBe(10);
expect(math.add).toHaveBeenCalledWith(2, 3);
});

Portanto, jest.fn cria uma função simulada, enquanto o jest.mock cria um módulo simulado.

Compartilhe
Comentários (0)