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

192
Vistas
byRole no devuelve el elemento DOM

Estoy migrando algunos de mis casos de prueba de unidad que se escribieron previamente usando Jest y Enzyme to React Testing Library. Estoy usando el componente Select de Material UI y sé que, para abrir el menú desplegable, tenemos que activar el evento mouseDown en el div correspondiente. Así es como lo hice en Enzyme (trabajando):

 wrapper.find('[role="button"]').simulate('mousedown', { button: 0 });

Estoy tratando de lograr lo mismo usando React Testing Library de la siguiente manera, que no funciona:

 const { container, getAllByRole, getByRole } = renderComponent(mockProps); fireEvent.mouseDown(getByRole('button')); // trigger the mouseDown on div having role=button

Después de esto, estoy tratando de acceder al elemento del listbox de lista que es el elemento ul :

 getByRole('listbox')

que arroja un error y dice:

 TestingLibraryElementError: Unable to find an accessible element with the role "listbox" There are no accessible roles. But there might be some inaccessible roles. If you wish to access them, then set the `hidden` option to `true`. Learn more about this here: https://testing-library.com/docs/dom-testing-library/api-queries#byrole

Lo he verificado y el elemento ul está visible (ni él ni su elemento principal no muestran nada ni tienen visibilidad oculta)

ingrese la descripción de la imagen aquí

ACTUALIZAR - 1

He intentado todos los siguientes enfoques para esperar a que aparezca el elemento en DOM:

  • waitFor
  • findByRole en lugar de getByRole

en ambos casos, arroja un error que Unable to find role="listbox"

¿Qué está mal?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Si el elemento no es accesible en el primer renderizado, podría aparecer este error, puede intentar pasar la opción oculta a la clave de opciones en el segundo argumento de getByRole, si esto no funciona, puede intentar usar findByRole, ese método espera el elemento , y si desea estar seguro de la visibilidad del elemento, puede intentar agregar un waitFor dentro de la prueba.

 getByRole('listbox', { options: { hidden: true } });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Asegúrese de que las animaciones no comprometan sus resultados. Si las animaciones cambian de opacidad o visualización y no terminaron antes de la afirmación de broma... es probable que arroje un error.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Encontré la causa raíz de este problema. Estoy usando el componente Select de MUI en modo disablePortal , lo que hace que la lista del menú se represente dentro del componente principal en lugar del cuerpo del documento. Pero mientras MUI hace eso, no elimina el atributo aria-hidden del div del componente principal y, debido a esa biblioteca de prueba, no puede ubicar el elemento del listbox de lista (ul) en el interior.

Hay un problema informado aquí: https://github.com/mui/material-ui/issues/19450

Entonces, como solución alternativa, pasé el data-testid al componente del menu ( MenuListProps ) y lo usé para obtener el listbox de lista.

about 4 years ago · Juan Pablo Isaza 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