Interceptación de solicitudes de red con Cypress
Clase 8 de 29 • Curso de Cypress Avanzado
Resumen
¿Cómo hacer tus pruebas más resilientes con interceptación de peticiones de red?
Cuando hablamos de pruebas automatizadas, es clave que sean resilientes a los cambios inesperados en las aplicaciones o librerías de terceros. A menudo, fallan debido a errores no tanto de nuestro código, sino de esas bibliotecas o servicios que utilizamos. Estos servicios pueden ser inestables o no asignarnos suficientes recursos en ambientes de prueba. Aquí es donde Cypress, una herramienta popular de prueba, nos proporciona opciones eficaces como la interceptación de peticiones de red para mejorar la confiabilidad de nuestras pruebas.
¿Qué es un CI.request y cómo se utiliza?
Para aquellos que ya están familiarizados con Cypress, el comando CI.request permite realizar peticiones a APIs de forma directa:
cy.request('https://pokeapi.co/api/v2/pokemon/ditto')
.then((response) => {
expect(response.body).to.have.property('name', 'ditto');
expect(response.status).to.eq(200);
});
Este comando es especialmente útil para autenticar usuarios o simular interacciones con servicios de backend. Sin embargo, no nos permite validar cómo nuestra interfaz maneja estas solicitudes de red.
¿Cómo interceptar solicitudes de red en Cypress?
La función de interceptación (intercept) en Cypress cubre esta limitación. Permite capturar y modificar peticiones, así como validar que se realicen ciertas consultas cuando se interactúa con la interfaz.
Ejemplo práctico de interceptación
Podemos interceptar una solicitud del tipo GET para analizar cómo responde la aplicación:
cy.intercept('GET', '**/pokemon/1').as('getBulbasaur');
cy.visit('/some-page');
cy.contains('Bulbasaur').should('be.visible');
cy.wait('@getBulbasaur').then((interception) => {
expect(interception.response.body.name).to.eq('bulbasaur');
expect(interception.response.statusCode).to.eq(200);
});
- Intercepción: Definimos una regla para interceptar solicitudes a una URL específica. En este caso, la del Pokémon Bulbasaur.
- Visita y validación: Navegamos a una página y comprobamos que "Bulbasaur" es visible.
- Espera de respuesta: Utilizamos
cy.wait
para esperar a que se complete la solicitud interceptada, permitiéndonos verificar que la respuesta sea la esperada.
Adaptación a entornos lentos
¿Qué sucede si una API es conocida por su lentitud? Podemos ajustar el tiempo de espera para asegurar que las pruebas tengan suficiente tiempo:
cy.wait('@getBulbasaur', { timeout: 20000 }).its('response.statusCode').should('eq', 200);
El uso de interceptaciones en pruebas automatizadas con Cypress puede ser una herramienta valiosa. No solo nos permite verificar que estás colaborando correctamente con APIs, sino también simular ciertas condiciones del entorno de producción sin riesgos, validando cómo se comportan nuestras aplicaciones en respuesta a cambios inesperados o fallos temporales.
Recuerda que mejorar la resiliencia de tus pruebas es esencial para minimizar los fallos y reducir el mantenimiento. Continúa explorando las amplias capacidades que Cypress ofrece, y sigue perfeccionando tus habilidades con cada prueba.