Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Como testar a função atualizaSaldo()?

Olá!

A resposta a este desafio foi com relação à função salvaTransacao(), que foi implementada usando try...catch e que retorna alguma coisa.

Tentei fazer também um teste para a função atualizaSaldo(). Ela foi implementada diferente, utilizando then() e não retorna nada, apenas faz o log de status na tela:

export async function atualizaSaldo(novoSaldo) {
  api
    .put('/saldo', { valor: novoSaldo })
    .then((resp) => console.log(resp.status))
    .catch((err) => console.log(err));
}

Quando faço o teste com uma chamada à API (sem fazer um mock dessa chamada), o teste roda corretamente. No entanto, quando crio um teste mockando a API (mockRequisicaoPost) e chamo a função atualizaSaldo(), o teste falha com o seguinte erro: "TypeError: Cannot read properties of undefined (reading 'then')". Imagino que seja porque essa função não tem nenhum retorno, mas não sei como fazer para testar.

Por favor, poderiam explicar como ficaria o teste nesse caso?

Obrigado.

2 respostas
solução!

Olá Matheus!

Entendi sua dúvida. De fato, como a função atualizaSaldo() não retorna nada, pode ser um pouco mais complicado testá-la.

Uma alternativa é utilizar o método jest.spyOn() para espionar a função console.log() e verificar se ela foi chamada com o status correto após a chamada à API.

Você pode fazer isso da seguinte forma:

test('atualizaSaldo() deve chamar console.log() com o status correto', async () => {
  const mockConsoleLog = jest.spyOn(console, 'log');
  const mockRequisicaoPut = jest.fn().mockResolvedValue({ status: 200 });
  api.post.mockImplementation(() => mockRequisicaoPut);

  await atualizaSaldo(100);

  expect(mockRequisicaoPut).toHaveBeenCalledWith('/saldo', { valor: 100 });
  expect(mockConsoleLog).toHaveBeenCalledWith(200);
});

Nesse exemplo, estamos espionando a função console.log() com o método jest.spyOn(), criando um mock para a requisição PUT com o método jest.fn(), e então chamando a função atualizaSaldo() com um novo saldo de 100.

Em seguida, verificamos se a requisição PUT foi chamada com os parâmetros corretos, e se a função console.log() foi chamada com o status correto (que no caso é 200).

Espero que isso ajude! Qualquer dúvida, é só falar.

Espero ter ajudado e bons estudos!

Valeu, Neilton! Obrigado por responder a esse meu combo de dúvidas!