Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

321
Visualizações
React Testing Library - usando 'await wait()' después de fireEvent

Estoy tratando de usar la biblioteca de prueba para buscar elementos DOM después de un fireEvent.click. Sé que necesito esperar después del fireEvent, pero no estoy seguro de por qué simplemente usar await no funciona. A continuación se muestra la misma prueba escrita de dos maneras: la primera falla, la segunda pasa. No entiendo por qué falla el primero... ¡Estoy muy agradecido por cualquier información!

pd: sé que la espera está en desuso y se prefiere esperar, sin embargo, debido a algunas limitaciones, no puedo actualizar la versión en este momento :(

PRUEBA FALLIDA

 // This test fails with the following error and warning: // Error: Unable to find an element by: [data-test="name_wrapper"] // Warning: An update to OnlinePaymentModule inside a test was not wrapped in act(...). it('this is a failing test...why', async () => { const { getByText, getByTestId } = render(<Modal {...props} />); const button = getByText('open modal'); fireEvent.click(button); const nameWrapper = await getByTestId('name_wrapper'); expect( nameWrapper.getElementsByTagName('output')[0].textContent ).toBe('Jon Doe'); const numberWrapper = await getByTestId('number_wrapper'); expect( numberWrapper.getElementsByTagName('output')[0].textContent ).toBe('123456'); });
PRUEBA DE APROBACIÓN -- ¿Por qué pasa esta pero la primera falla?

 // This test passes with no warnings it('this is a passing test...why', async () => { const { getByText, getByTestId } = render(<Modal {...props} />); const button = getByText('open modal'); fireEvent.click(button); await wait(() => { const nameWrapper = getByTestId('name_wrapper'); expect( nameWrapper.getElementsByTagName('output')[0].textContent ).toBe('Jon Doe'); const numberWrapper = getByTestId('number_wrapper'); expect( numberWrapper.getElementsByTagName('output')[0].textContent ).toBe('123456'); }) });

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

5 meses después, vuelvo a responder mi pregunta (he aprendido mucho desde que publiqué esta pregunta jajaja)....

En primer lugar, dado que han pasado 5 meses, quiero subrayar que, si es posible, es mejor usar la biblioteca userEvent en lugar de fireEvent .

También sería negligente no mencionar que hay muchos antipatrones en el código... Solo debe hacer una afirmación en waitFor . Debe evitar usar getByTestId en favor de alternativas más accesibles.

Y finalmente, la razón por la que fallaba la primera prueba es que no puede usar wait con getBy* . getBy no es asíncrono y no esperará. Esta hubiera sido la mejor solución:

 fireEvent.click(button); const nameWrapper = await findByTestId('name_wrapper');

Entonces la prueba habría esperado a que el elemento nameWrapper estuviera disponible.

La segunda prueba pasó porque getBy está envuelto en la utilidad asíncrona de RTL, wait ( wait ahora está obsoleta en favor de waitFor ). Eso es esencialmente lo que hace findBy bajo el capó: findBy es la versión asíncrona de getBy .

Cuando publiqué la pregunta, no entendí completamente que await es una palabra clave de Javascript (y solo azúcar sintáctica para hacer que el código espere una promesa de resolución). wait (ahora waitFor ) es una utilidad de RTL que hará que la ejecución de la prueba espere hasta que la devolución de llamada no arroje un error.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda