3
respostas

Dúvida a respeito da 'sincronia' da rotina de teste

após construir o arquivo de teste para o componente transação (test com snapshot), recebi um novo tipo de mensagem no terminal que ainda não consegui entender com as pesquisas na internet. Ps: os test continuam dando ok, não afetou a execução

 PASS  src/transacoes/Transacao.test.js

  ●  Cannot log after tests are done. Did you forget to wait for something async in your test?
    Attempted to log "Warning: An update to App inside a test was not wrapped in act(...).

    When testing, code that causes React state updates should be wrapped into act(...):

    act(() => {
      /* fire events that update state */
    });
    /* assert on the output */

    This ensures that you're testing the behavior the user would see in the browser. Learn more at https://fb.me/react-wrap-tests-with-act
        in App (at App.test.js:9)".

      42 |     carregarTransacoes();
      43 |   }, [saldo])
    > 44 | 
         | ^
      45 |   return (
      46 |     <div className="App">
      47 |       <header className="App-header">

      at console.error (node_modules/@jest/console/build/BufferedConsole.js:163:10)
      at printWarning (node_modules/react-dom/cjs/react-dom.development.js:88:30)
      at error (node_modules/react-dom/cjs/react-dom.development.js:60:5)
      at warnIfNotCurrentlyActingUpdatesInDEV (node_modules/react-dom/cjs/react-dom.development.js:23284:7)
      at dispatchAction (node_modules/react-dom/cjs/react-dom.development.js:15656:9)
      at obterSaldo (src/App.js:44:5)
3 respostas

Fala ai Luis, tudo bem? Esse problema é porque deve ter alguma função assíncrona que executa um console.log e essa função está sendo chamada depois que o Jest chama e termina a execução dos testes de forma síncrona.

Precisa ver se faltou algum await nos códigos ou nos testes e também utilizar a função act como a própria sugestão do erro informa.

Espero ter ajudado.

Obrigado pela resposta Matheus, entretanto ai que se encontra minha confusão no entendimento, pois no projeto deste curso não tratamos de sincronismos, pelo menos não de maneira explícita com async-await. Dai que estou com dificuldade em entender a origem do warning, vou verificar se algumas das funções utilizadas é por de baixo dos panos assíncrona.

Fala Luis, é que na verdade o act não envolve apenas async/await, mas, também efeitos colaterais do componente como alteração de estado seja com hook ou via classe.

Basicamente a gente usa o act para processos e momentos de atualizações não deterministicas, ou seja, a atualização vai acontecer em algum momento.

Espero ter ajudado.