¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
dev
Eva Rodríguez 18/04/2024 Cargando comentarios…
Cuando estás realizando pruebas unitarias con React Testing Library, es muy frecuente que necesites simular el comportamiento de una función para poder aislar correctamente el componente que estás testeando y que este no tenga dependencias externas. En este post, te contaré cómo mockear funciones síncronas y asíncronas, gracias a Jest, para que puedas controlar la respuesta que te devuelven.
React Testing Library y Jest son herramientas que suelen utilizarse juntas en el ecosistema de pruebas de aplicaciones React. React Testing Library se beneficia de las funciones y utilidades que facilitan la escritura y ejecución de pruebas que proporciona Jest.
Entre estas utilidades tenemos las Mock Functions, encargadas de simular el comportamiento de las funciones durante las pruebas. Aquí tienes una lista completa de todas las Mock Functions que proporciona Jest, pero hoy nos vamos a centrar en las encargadas de mockear el valor que devuelven las funciones, tanto síncronas como asíncronas, de nuestro código React.
Imagina que tenemos un componente React que utiliza una función externa para calcular la suma de dos números.
En nuestro archivo de test MyComponent.test.js queremos simular la función sum() y la respuesta de esta. Lo haremos de la siguiente manera:
En este ejemplo utilizamos jest.mock() para mockear la función sum y .mockReturnValue() para simular el resultado de la función, haciendo que siempre devuelva 10.
Supongamos ahora que estamos manejando una llamada a una API en nuestro componente React. Vamos a ver cómo usar .mockResolvedValue() para simular una función asíncrona que devuelve una Promesa.
Partiendo del siguiente código React:
En el archivo de test MyAsyncComponent.test.js podemos utilizar .mockResolvedValue() para simular la función getUser y resolver la Promesa con un valor específico:
En este caso, .mockResolvedValue() se utiliza para simular la función getUser y hacer que devuelva una Promesa resuelta con el objeto especificado ({ name: “MockedUser”' }). Esto permite probar el componente sin depender de la lógica real de la función getUser.
En el caso de que la llamada asíncrona que hemos realizado falle y nos devuelva un error, ¿cómo simulamos esa respuesta en nuestros test de React Testing Library? Para ello, Jest nos ofrece .mockRejectedValue, que simula un escenario de error durante la llamada a la API.
Partiendo del ejemplo anterior, tenemos el mismo componente MyAsyncComponent.jsx, la forma de implementar el control del error en nuestros test sería la siguiente:
Con .mockRejectedValue() forzamos que la llamada a la API falle, y verificamos que nuestro componente ‘MyAsyncComponent’ maneja correctamente el error mostrando el mensaje correspondiente en pantalla.
En este post, hemos aprendido a utilizar .mockReturnValue() y .mockResolvedValue() de Jest para simular funciones síncronas y asíncronas en pruebas realizadas con React Testing Library. Además, hemos descubierto .mockRejectedValue() para manejar errores en llamadas asíncronas.
Recordemos que existen otras Mock Functions en Jest que ofrecen funcionalidades específicas. Te invito a explorar y experimentar con ellas, elevando así la cobertura y eficacia de tus pruebas, asegurando un código más sólido y confiable.
¡Feliz testing!
Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.
Cuéntanos qué te parece.