Contenido del curso
Cookies y Localstorage
Emulando dispositivos
Instalando plugins
Flaky tests
Buenas prácticas
Visual testing
Seguridad
Data Driven Test
BDD
Reportes
Docker
Dashboard
CI/CD
Final
Manejo de cookies en Cypress con cy.session
Resumen
Aprender a manejar cookies en Cypress te permite controlar el estado de sesión, validar autenticaciones y mantener pruebas aisladas y confiables. Esta guía es ideal para QA Engineers y desarrolladores que automatizan flujos web y necesitan trabajar con datos persistentes entre pruebas.
A lo largo del recorrido vas a ver cómo obtener, crear, preservar y limpiar cookies con la sintaxis tradicional, y también cómo aprovechar la nueva función experimental cy.session() que reemplaza varios trucos antiguos.
¿Cómo configuro un proyecto de Cypress para probar cookies?
Antes de tocar cookies conviene definir la URL base en el archivo de configuración. Con eso evitas repetir la dirección completa en cada cy.visit() y mantienes el código limpio.
Dentro de la carpeta e2e (recuerda que en Cypress 10 ya no se llama integration) crea un archivo con el sufijo correcto para que el runner lo detecte.
¿Por qué el archivo debe terminar en .cy? Porque Cypress 10 reconoce únicamente los archivos con la extensión
.cy.jso.cy.tsdentro dee2e. Sin ese sufijo, la prueba no aparece en el runner.
El ejemplo trabaja sobre un Pokédex sencillo, pero la lógica aplica a cualquier sitio.
¿Cómo obtengo y creo cookies con cy.getCookies y cy.setCookie?
El primer comando útil es cy.getCookies(), que devuelve todas las cookies del dominio actual. Combinado con la aserción should('be.empty') puedes validar que el sitio arranca sin cookies.
Para crear una cookie usa cy.setCookie('nombre', 'Javier'). Después puedes confirmar que existe con cy.getCookies().should('have.length', 1). En el runner verás detalles como tiempo de expiración y la bandera httpOnly, además de cualquier opción extra que le pases.
Si quieres trabajar con una cookie específica usa cy.getCookie('nombre') y valida con should('have.property', 'value', 'Javier'). Aquí aparece el primer comportamiento clave: Cypress limpia cookies y localStorage entre cada prueba para mantenerlas aisladas, así que la cookie creada en un it no estará disponible en el siguiente por defecto.
¿Cómo preservo cookies entre pruebas en la forma tradicional?
La forma clásica para evitar esa limpieza automática es usar Cypress.Cookies.defaults({ preserve: 'nombre' }). Con esa línea le indicas a Cypress que conserve la cookie llamada nombre entre pruebas.
Para controlar el estado inicial y final de cada suite puedes apoyarte en hooks:
before: ejecutacy.clearCookies()para empezar en limpio.after: usacy.clearCookie('nombre')para borrar solo una cookie específica al terminar.beforeEach/afterEach: útiles cuando necesitas reiniciar estado en cadait.
¿Qué diferencia hay entre clearCookies y clearCookie?
clearCookiesborra todas las cookies del dominio, mientras queclearCookie('nombre')elimina solo la que indiques por nombre.
Esta API tradicional aún funciona, pero el runner muestra una alerta de deprecación: Cypress está empujando hacia un nuevo modelo basado en sesiones.
¿Qué cambia con experimentalSessionAndOrigin y cy.session?
Para activar el nuevo paradigma debes habilitar el flag experimentalSessionAndOrigin: true en el archivo de configuración. Al hacerlo, Cypress.Cookies.defaults({ preserve }) deja de funcionar y aparece otra regla importante: necesitas visitar la página en cada prueba, ya que Cypress no preserva el contexto anterior automáticamente.
Para no repetir cy.visit() línea por línea, ponlo dentro de un beforeEach. Y para conservar el estado de autenticación o cookies usa cy.session('login', () => { ... }), donde dentro del callback colocas los comandos que quieres ejecutar una sola vez y reutilizar.
js beforeEach(() => { cy.session('login', () => { cy.setCookie('nombre', 'Javier') }) cy.visit('/') })
¿Para qué sirve cy.session en pruebas reales? Sirve para iniciar sesión vía API con
cy.request, guardar el token devuelto en una cookie y reutilizar esa sesión en otras pruebas sin repetir el login, lo que acelera la suite completa.
El beneficio práctico es doble: tus pruebas siguen aisladas, pero la sesión se cachea y se restaura rápidamente entre it.
¿Cómo replico el comportamiento de preserveOnce?
En la API tradicional existía Cypress.Cookies.preserveOnce() para conservar una cookie solo en la siguiente prueba. Con la nueva API simplemente mueves el cy.session() desde beforeEach hacia un before. De esa manera la sesión se establece una vez al inicio y no se renueva en cada it.
¿Cuándo conviene usar la API experimental?
Algunos criterios para decidir:
- Usa la API tradicional si tu proyecto necesita estabilidad inmediata y no quieres depender de flags experimentales.
- Adopta
cy.sessionsi trabajas con autenticaciones por token y quieres pruebas más rápidas. - Considera que la versión tradicional será deprecada en futuras versiones de Cypress.
Un buen reto para fijar lo aprendido es aplicarlo en un sitio real: obtener un token vía cy.request, almacenarlo y reutilizarlo en peticiones autenticadas dentro de tus pruebas. ¿Lo intentaste ya? Cuéntame en los comentarios cómo te fue con cy.session en tu proyecto.