Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Comportamento do waitFor

Fiquei com uma dúvida nessa aula. Quando implementei o expect(enviaLance).toHaveBeenCalledWith("10"), recebi o mesmo warning comentado aqui: https://cursos.alura.com.br/forum/topico-sugestao-warning-an-update-to-envialance-inside-a-test-was-not-wrapped-in-act-273254, e consegui resolver com a solução oferecida pela autora desse tópico.

Mas dando sequência na aula, fiz um teste e quando envolvo apenas o expect(getByText(ENVIADO)).toBeTruty() com o waitFor, deixando de fora o expect(enviaLance)..., o teste funciona normalmente sem warnings.

Não entendi muito bem o por quê disso acontecer.

Funciona sem warnings: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Warning ("An update to EnviaLance inside a test was not wrapped in act(...)."): Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Oi Willian, tudo bem?

O waitFor é uma função da biblioteca "testing-library" que nos permite aguardar por alguma ação assíncrona antes de realizar uma verificação no teste. No seu caso, o waitFor está sendo utilizado para aguardar a exibição da mensagem "lance enviado com sucesso" na tela antes de realizar o expect(getByText(ENVIADO)).toBeTruthy().

Quando você envolve apenas o expect(getByText(ENVIADO)).toBeTruthy() com o waitFor, o teste funciona normalmente sem warnings porque não há nenhuma ação assíncrona sendo aguardada antes dessa verificação. Portanto, não é necessário utilizar o waitFor nesse caso.

Por outro lado, quando você utiliza o expect(enviaLance).toHaveBeenCalledWith("10"), você está verificando se a função enviaLance foi chamada com o valor "10". Como essa é uma ação assíncrona, é necessário utilizar o waitFor para aguardar a conclusão dessa ação antes de fazer a verificação.

Em resumo, o waitFor é utilizado quando há a necessidade de aguardar uma ação assíncrona antes de realizar uma verificação no teste. Caso não haja nenhuma ação assíncrona, não é necessário utilizar o waitFor.

Um abraço e bons estudos.