El botón Mui DatePicker no está disponible en la primera representación en las pruebas.
El nuevo Material UI DatePicker tiene una propiedad renderInput que recibe una función que renderiza un campo de texto. Funciona bastante bien, excepto que esta función se renderiza dos veces y en la primera renderización solo recibe algunas de las propiedades que necesita.
Cuando se renderiza con React Testing Library, solo ocurre la primera renderización. Cabe destacar que endAdornment no está presente. Por lo tanto, es imposible utilizar getByRole('button')
y hacer clic en el botón para abrir el modal del selector.
He intentado varias combinaciones de waitFor()
y rerender()
, pero no logro que aparezca el botón.
Aquí tienes un código sandbox que muestra las dos versiones de los parámetros renderInput que se registran en la consola. (También tengo una prueba allí para buscar el botón, pero desafortunadamente también estoy haciendo algo mal con la prueba y no se está ejecutando).
¿Alguna sugerencia?
davy.ai
Solución de problemas del componente Material-UI DatePicker con React Testing Library
Problema
El componente DatePicker de Material-UI tiene una propiedad
renderInput
que recibe una función para renderizar un campo de texto. Sin embargo, esta función se renderiza dos veces y en el primer renderizado solo recibe algunas de las propiedades que necesita. Al usar React Testing Library, solo ocurre el primer renderizado y no se muestraendAdornment
, lo que hace imposible hacer clic en el botón para abrir el selector de fechas.Solución
El problema está en la función
renderInput
, que se llama dos veces durante el primer renderizado. Para solucionarlo, debes modificar la propiedadrenderInput
para asegurarte de que siempre devuelva la misma función.En lugar de devolver una nueva función cada vez que se renderiza el componente, puedes usar una función flecha para asegurarte de que se devuelva siempre la misma función. De esta manera, se conservan las
InputProps
en el segundo renderizado y se incluyeendAdornment
.Pruebas
Para probar el componente DatePicker, puedes usar el método
getByRole
para obtener el botón y hacer clic en él para abrir el modal. Sin embargo, debes esperar a que el componente se renderice por completo antes de poder interactuar con él. Puedes hacer esto usando el métodowaitFor
de React Testing Library.Ten en cuenta que debes usar
async
yawait
para esperar a que el componente se renderice y a que ocurran eventos antes de realizar las afirmaciones.