1
resposta

Novamente, dúvida a respeito da utilidade do Mock

Olá, tudo bem?

Sei que já comentaram a respeito disso, mas não vi nenhuma resposta que deixasse claro a utilidade do mock apresentado em aula.

Não vejo sentido em um teste, no qual declaramos uma função, pois fazer obj.salvar = () => {} é equivalente a dizer: function salvar() {}, e testamos pra ver se o resultado que definimos como retorno realmente será retornado.

Quero entender a lógica por trás disso. Não sei se a resposta está no funcionamento interno do "jest.fn().mockReturnValue()".

Resumindo:

declarar uma função,

function retornaNumero10() {
    return 10;
}

e depois testar,

const result = retornaNumero10();
expect(result).toBe(10);

Não faz sentido pra mim. Alguém pode me esclarecer o que está havendo aqui?

Muito obrigado pela atenção.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Ola!

O mock não serve para testar a função em si, mas para testar o comportamento do código que depende dela. Quando você faz algo como jest.fn().mockReturnValue(), não está avaliando se o mock funciona, e sim controlando o que uma dependência vai retornar para verificar se o seu código principal reage corretamente.

Pense assim: em um sistema real, uma função pode acessar banco de dados, serviços externos ou APIs. Em um teste unitário, você não quer depender desses recursos, porque isso tornaria o teste lento, frágil e difícil de reproduzir. Então, você substitui essa função real por um mock, que simula o comportamento esperado e permite isolar a lógica que está sendo testada.

Por exemplo, se você tem uma função criarUsuario que chama servicoUsuario.salvar, você quer testar se criarUsuario chama o método corretamente e faz o que deveria com o retorno. O mock permite que você defina de forma controlada o retorno de salvar, sem precisar acessar um banco de verdade. Assim:

function criarUsuario(servicoUsuario, nome) {
  const usuario = servicoUsuario.salvar({ nome });
  return usuario.id;
}

test('deve retornar o id do usuário salvo', () => {
  const servicoMock = { salvar: jest.fn().mockReturnValue({ id: 1 }) };

  const id = criarUsuario(servicoMock, 'João');

  expect(id).toBe(1);
  expect(servicoMock.salvar).toHaveBeenCalledWith({ nome: 'João' });
});

Nesse teste, o foco não é servicoMock.salvar, e sim criarUsuario. O mock só existe para que o comportamento de criarUsuario possa ser verificado de forma previsível e isolada.
E, o jest.fn() registra todas as chamadas e argumentos, o que uma função comum não faz. Por isso ele é mais do que apenas uma função simulada: ele também é uma ferramenta de observação.
Abç;