Esperando a Renderização de Elementos Assíncronos com Jest DOM


Quando lidamos com operações assíncronas em testes, é crucial garantir que os elementos tenham sido carregados antes de realizar verificações. O Jest DOM oferece mecanismos para lidar com essas situações, assegurando que o teste aguarde a renderização de elementos assíncronos antes de continuar.

Utilizando waitFor

O Jest DOM fornece a função waitFor para esperar que uma condição seja atendida antes de prosseguir com o teste. Junto com o uso de async/await, podemos lidar de maneira eficaz com operações assíncronas.

import { render, waitFor } from '@testing-library/react';
import MyComponent from './MyComponent';
 
it('deve renderizar o componente após operação assíncrona', async () => {
  render(<MyComponent />);
 
  // Aguarda até que o elemento desejado seja renderizado
  await waitFor(() => {
    expect(screen.getByText('Elemento Renderizado')).toBeInTheDocument();
  });
});

No exemplo acima, waitFor aguarda até que a função de retorno de chamada forneça uma condição verdadeira antes de prosseguir. Neste caso, estamos esperando que o elemento com o texto ‘Elemento Renderizado’ esteja na tela.

Utilizando waitForElementToBeRemoved

Para cenários em que desejamos esperar que um elemento seja removido, podemos usar a função waitForElementToBeRemoved. Este método é útil quando queremos garantir que um elemento específico seja retirado do DOM antes de continuar o teste.

import { render, waitForElementToBeRemoved } from '@testing-library/react';
import MyComponent from './MyComponent';
 
it('deve remover o elemento após operação assíncrona', async () => {
  render(<MyComponent />);
 
  // Aguarda até que o elemento seja removido
  await waitForElementToBeRemoved(screen.getByText('Elemento Removido'));
});

Neste exemplo, waitForElementToBeRemoved garante que o teste aguarde até que o elemento com o texto ‘Elemento Removido’ não esteja mais presente no DOM.

Referências