¿Cómo optimizar nuestro código con hooks en nuestras pruebas?
La programación efectiva es un arte en el que cada línea de código cuenta. En el dinámico mundo del desarrollo de software, uno de los principios más esenciales es "Don't Repeat Yourself" (No te repitas a ti mismo). En este contexto, optimizar el código, especialmente en las pruebas, es fundamental. En esta guía aprenderás a utilizar "hooks", mecanismos de control que permiten ejecutar ciertas acciones antes o después de acciones clave, como las pruebas ejecutadas en un ambiente automatizado.
¿Qué son los hooks y cómo pueden mejorar nuestras pruebas?
Los hooks, que en inglés significa literalmente "ganchos", son bloques de código que se ejecutan en puntos específicos de tu suite de pruebas. Estos se dividen principalmente en before
, beforeEach
, after
, y afterEach
. Estos hooks permiten ejecutar acciones sin que se repitan innecesariamente en cada prueba, optimizando así el flujo y rendimiento del código.
Implementación básica de hooks
before
: Se ejecuta antes de todas las pruebas en una suite. Es útil para configurar el entorno necesario para que todas las pruebas comiencen en un estado conocido. Por ejemplo, abrir una página web antes de realizar cualquier test.
before(() => {
cy.visit('http://mi-pagina-web.com');
});
beforeEach
: Corre antes de cada prueba individual en tu suite. Ideal para realizar configuraciones que deben asegurarse de estar listas antes de cada test, como iniciar sesión en la aplicación.
beforeEach(() => {
cy.log('Comenzando un nuevo test');
});
after
: Se ejecuta una vez que todas las pruebas de la suite han concluido. Esto puede usarse para tareas de limpieza o para devolver el entorno a su estado inicial.
after(() => {
cy.log('Todas las pruebas han terminado');
});
afterEach
: Corre después de cada prueba individual, útil para tareas de limpieza como cerrar sesiones o restaurar configuraciones.
afterEach(() => {
cy.log('Test finalizado');
});
¿Cómo utilizar los hooks dentro y fuera de 'describe'?
La flexibilidad de los hooks permite usarlos tanto dentro como fuera de los bloques describe
. Esto ayuda a que el código sea más modular y fácil de gestionar.
- Dentro de
describe
: Al usarlos aquí, los hooks se aplicarán a todos los tests escritos dentro del mismo bloque describe.
describe('Grupo de pruebas', () => {
before(() => {
cy.visit('http://otra-pagina.com');
});
it('Prueba 1', () => {
cy.log('Ejecutando Prueba 1');
});
it('Prueba 2', () => {
cy.log('Ejecutando Prueba 2');
});
});
- Fuera de
describe
: Permite configurar un ambiente global para varias suites de pruebas.
before(() => {
cy.log('Configurando ambiente global');
});
describe('Grupo de pruebas 1', () => {
it('Prueba de grupo 1', () => {
cy.log('Prueba dentro del grupo 1');
});
});
describe('Grupo de pruebas 2', () => {
it('Prueba de grupo 2', () => {
cy.log('Prueba dentro del grupo 2');
});
});
¿Cuándo y por qué deberías usar hooks?
Los hooks no solo facilitan la escritura de pruebas más concisas, sino que también promueven el mantenimiento del código y la reutilización de configuraciones comunes. Al definir configuraciones globales y específicas para cada prueba, se maximiza la eficiencia de las pruebas automatizadas.
- Reducción de Repetición de Código: Evita escribir las mismas configuraciones en cada prueba.
- Claridad y Modularidad: Hace que las pruebas sean más fáciles de leer y entender.
- Eficiencia y Rendimiento: Al ejecutarse solo cuando es necesario, mejora el rendimiento global de las pruebas.
En resumen, los hooks son una herramienta poderosa en el arsenal de cualquier desarrollador para optimizar las pruebas automatizadas. Experimenta con estas recomendaciones y adapta los hooks a tus necesidades específicas, y verás cómo tu suite de pruebas se vuelve más eficiente y manejable. ¡Sigue aprendiendo y perfeccionando tus habilidades para convertirte en un mejor desarrollador cada día!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?