Olá.
Pesquisando no Stack Overflow e na documentação da RTL, vi que existe um método chamado waitFor
que também resolve esse problema, sem a necessidade de criar um act
e chamar explicitamente a função setTransacoes
em result.current[1]
. O resultado é um código mais próximo do que realmente acontece ao chamar o hook.
Segue como o código fica:
describe('hooks/useListaTransacoes.js', () => {
test('deve retornar uma lista de transações e uma função que a atualiza', async () => {
buscaTransacoes.mockImplementation(() => mockTransacao);
const { result } = renderHook(() => useListaTransacoes());
// componente acabou de ser montado, retorna lista vazia
expect(result.current[0]).toEqual([]);
// espera pelo término do retorno assíncrono do useEffect para testar a assertiva
await waitFor(() => expect(result.current[0]).toEqual(mockTransacao))
})
})