🕵️‍♂️Módulo 5: Técnicas avanzadas en Jasmine

🕵️ 5.1. Configuración avanzada de Spies

Los spies (espías) en Jasmine permiten observar y modificar el comportamiento de funciones en pruebas sin necesidad de modificar el código original. Esto es útil para pruebas en las que quieres simular el comportamiento de ciertas dependencias o funciones.

Ejemplo avanzado de un Spy en TypeScript:

typescript class Calculadora { sumar(a: number, b: number): number { return a + b; } }

describe('Pruebas avanzadas con spies', () => { let calculadora: Calculadora;

beforeEach(() => { calculadora = new Calculadora(); });
// Espiamos el método 'sumar' de la clase Calculadora it('debería espiar el método sumar y modificar su comportamiento', () => { spyOn(calculadora, 'sumar').and.returnValue(10); // Simulamos que siempre devuelve 10
const resultado = calculadora.sumar(3, 4);
expect(resultado).toBe(10);  // Verificamos que el resultado sea 10, no importa la entrada
expect(calculadora.sumar).toHaveBeenCalledWith(3, 4);  // Verificamos que f
ue llamado con los argumentos correctos
    }); 
});

🛑 5.2. Manejo de errores y excepciones en pruebas

Jasmine proporciona el matcher toThrowError() para comprobar que una función lanza una excepción. Puedes usarlo para asegurarte de que tu código maneje correctamente las excepciones esperadas.

Ejemplo de manejo de errores:

class Calculadora { dividir(a: number, b: number): number { if (b === 0) { throw new Error('División por cero'); } return a / b; } }

describe('Pruebas de manejo de excepciones', () => { let calculadora: Calculadora;

beforeEach(() => { calculadora = new Calculadora(); });
// Verificamos que se lanza una excepción al dividir por cero it('debería lanzar un error al dividir por cero', () => { expect(() => calculadora.dividir(4, 0)).toThrowError('División por cero'); }); });

🧩 5.3. Pruebas parametrizadas con jasmine-data-provider

Las pruebas parametrizadas permiten ejecutar el mismo conjunto de pruebas con diferentes entradas, lo que es útil para reducir código repetitivo.

Ejemplo de pruebas parametrizadas:

5.4. Pruebas asíncronas en Jasmine

Para manejar pruebas asíncronas en Jasmine, puedes usar async() y fakeAsync() con tick(). Estas herramientas permiten simular el paso del tiempo y controlar la ejecución de promesas o temporizadores.

Ejemplo de pruebas con fakeAsync() y tick():

🕒 5.5. Faking timers en Jasmine con jasmine.clock()

Jasmine también permite controlar los temporizadores (como setTimeout o setInterval) utilizando jasmine.clock(). Esto es útil para simular el paso del tiempo sin tener que esperar realmente.

Ejemplo usando jasmine.clock() para simular temporizadores:

📝 5.6. Uso de jasmine.createSpyObj() para objetos simulados

jasmine.createSpyObj() permite crear objetos simulados con múltiples métodos espías de manera sencilla. Esto es útil para probar servicios o componentes que dependen de múltiples métodos en un objeto o servicio. Ejemplo de createSpyObj:

🔍 5.7. Uso de .withContext() para mejorar los mensajes de error

El método .withContext() en Jasmine permite agregar un contexto adicional a los errores en las expectativas, proporcionando mensajes más claros cuando las pruebas fallan. Esto es especialmente útil en pruebas con múltiples expectativas o cuando es difícil entender qué parte falló.

Ejemplo con .withContext():

Última actualización