Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

306
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda