Uso de Fixtures en Pruebas Automatizadas con Cypress
Clase 19 de 29 • Curso de Cypress Avanzado
Resumen
¿Cómo utilizar fixtures en pruebas automatizadas?
Trabajar con fixtures en pruebas automatizadas es una técnica poderosa que permite que nuestros tests sean dirigidos por data reutilizable y mantenible. En esta clase, aprenderás a implementar fixtures para almacenar información no sensible y a enfrentar diversas situaciones de testing. Los fixtures son perfectos para datos que no cambian según el ambiente, como credenciales falsas o configuraciones por defecto.
¿Qué son los fixtures y cómo se diferencian de las variables de entorno?
Los fixtures son archivos que almacenan información que no es sensible y que no va a cambiar dependiendo del entorno. A diferencia de las variables de entorno, que se utilizan para definir valores que pueden variar, los fixtures son soluciones más estáticas y reutilizables para datos consistentes.
¿Cómo implementar un test con fixtures?
Comencemos con el código base para un login erróneo utilizando fixtures en JSON. Este ejemplo te demostrará cómo implementar un test simple y práctico.
// Definición del test de login erróneo
describe('Login erróneo con fixtures', () => {
// Validar que estamos en la página de login
it('Validar página de login', () => {
cy.visit('/login');
cy.url().should('include', '/login');
});
// Leer archivos de fixtures
it('Login erróneo mediante fixture', () => {
cy.fixture('credentials').then(credentials => {
cy.get('#email').type(credentials.email);
cy.get('#password').type(credentials.password);
cy.get('#login-button').click();
cy.contains('Error de credenciales').should('be.visible');
});
});
});
¿Cómo crear un fixture en JSON?
Crear un archivo fixture en JSON es sumamente sencillo. Para nuestro ejemplo, creamos un archivo credentials.json
que pueda ser utilizado por Cypress.
{
"email": "usuario@ejemplo.com",
"password": "contraseñaerrónea"
}
¿Cómo manejar múltiples fixtures y pruebas dinámicas?
Para probar múltiples credenciales o realizar tests dinámicos, podemos utilizar un arreglo de objetos que contenga los nombres de los fixtures y usarlos en un forEach
. Éste es un pequeño ejemplo de cómo se puede lograr:
const credentialsForUsers = [
{ nombre: "usuarios", titulo: "login con users" },
{ nombre: "credentials", titulo: "login con credentials" }
];
credentialsForUsers.forEach(({nombre, titulo}) => {
describe(titulo, () => {
it('Realizar login con fixture', () => {
cy.visit('/login');
cy.fixture(nombre).then(credentials => {
cy.get('#email').type(credentials.email);
cy.get('#password').type(credentials.password);
cy.get('#login-button').click();
cy.contains('Error de credenciales').should('be.visible');
});
});
});
});
Optimización de pruebas con fixtures
Cuando trabajamos con múltiples credenciales, podemos optimizar nuestros tests:
- Reutilización de código: Usa variables y funciones que permitan reutilizar pasos comunes.
- Manejo de datos: Agrupa credenciales en un solo archivo fixture y recórrelos programáticamente.
- Comprobaciones: Asegúrate de que tu test siempre está comprobando el mensaje de error o éxito esperado.
Sigue estos consejos y aprovecha al máximo los fixtures para enriquecer tus pruebas automatizadas. No olvides practicar, experimentar y ajustar tus configuraciones a las necesidades de tu proyecto. La práctica constante te llevará a mejorar tus habilidades como tester. ¡El próximo tema es el Behavior Driven Development (BDD)!