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

[Bug] Warning: BrowserRouter inside a test

Olá, boa noite!

O teste rodou com sucesso, mas aparece essa mensagem no prompt. É um problema de versão, ou algo está realmente errado?

Warning: An update to BrowserRouter 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://reactjs.org/link/wrap-tests-with-act
  at fn (C:\bytebank-v2\node_modules\react-router-dom\index.tsx:757:3)
1 resposta
solução!

Oii Natalia, tudo bem?

A mensagem que você está vendo é um aviso (não um erro) indicando que a atualização do estado não está sendo feita dentro de uma função act(). Todas as atualizações de estado devem acontecer dentro de uma função act() para que o ambiente de testes possa acompanhar todas as atualizações que estão acontecendo e atualizar a UI de acordo.

No seu caso, parece que a atualização do estado não está sendo envolvida por uma função act(). Isso pode acontecer quando você está testando componentes que fazem atualizações de estado em resposta a mudanças no ambiente (como mudanças de rota no BrowserRouter).

Para resolver isso, você pode envolver a parte do seu código de teste que está causando a atualização do estado em uma função act().

Exemplo:

// importações

describe('Componente <App/>', () => {
  test('Deve navegar até a página correspondente ao link clicado', async () => {
    render(<AppRoutes />, { wrapper: BrowserRouter });

    const linkPaginaCartoes = screen.getByText('Cartões');
    expect(linkPaginaCartoes).toBeInTheDocument();

    await act(async () => {
      userEvent.click(linkPaginaCartoes);
    });

    const tituloPaginaCartoes = await screen.findByText('Meus cartões');
    expect(tituloPaginaCartoes).toBeInTheDocument();
  });
});

Desse modo, a chamada para userEvent.click(linkPaginaCartoes); foi envolvida em uma função act(). Isso garante que todas as atualizações de estado que acontecem como resultado desse clique sejam rastreadas pelo React.

O act() pode ser usado tanto de forma síncrona quanto assíncrona. No caso de atualizações de estado que acontecem assincronamente (como no seu caso, onde a atualização do estado acontece em resposta a um clique), você deve usar a forma assíncrona de act() como mostrado no exemplo acima.

Um abraço e bons estudos.