Pruebas Unitarias en Formularios Reactivos con Angular

Clase 28 de 38Curso de Unit Testing para MEAN con Jasmine

Resumen

¿Cómo iniciar pruebas unitarias en un formulario reactivo con Angular?

Antes de lanzarnos a las pruebas unitarias, es vital asegurar que tu código está en orden. Hemos configurado los imports necesarios, incluyendo Stub classes y los formularios reactivos. Ahora, el objetivo principal es verificar que la inicialización y estructuración del componente se desarrollen de forma correcta.

¿Qué debe revisarse primero?

Al inicializar el componente, es crucial examinar dos formularios:

  1. Primer grupo de formularios:
    • Tres propiedades (inputs) agrupadas en el formulario.
  2. Segundo grupo de formularios:
    • Dos inputs, un input ordinario y un array que podría tener más elementos.

El objetivo inicial es asegurarse de que toda la declaración de estos formularios sea precisa y que los controles esperados estén correctamente configurados.

// Código de ejemplo para la inicialización de pruebas
describe('cuando el componente es inicializado', () => {
    it('debería crear los formularios correctamente', () => {
        const keys = Object.keys(component.firstGroup.controls);
        expect(keys).toEqual(['title', 'author', 'description']);
    });
});

¿Cómo prevenir errores al añadir nuevos controles?

Agregar nuevas pruebas es un buen mecanismo para asegurarse de que cualquier alteración, como añadir o eliminar controles, se detecten de manera oportuna:

  • Al crear una nueva función de prueba se espera que esta alerte si se agregan o quitan elementos sin las expectativas debidas.
// Código de ejemplo para agregar pruebas de seguridad
it('debería verificar que los grupos del formulario son creados', () => {
    const assetsKeys = Object.keys(component.secondFormGroup.controls);
    expect(assetsKeys).toEqual(['firstAsset', 'assets']);
});

¿Cómo probar la funcionalidad de agregar elementos en un array de formularios?

El desafío aquí es evaluar una función llamada addAsset, diseñada para añadir elementos al array en el segundo formulario:

  • Los elementos nuevos deben ser controlados por un índice apropiado, donde el primer elemento tiene la clave 0 y el segundo 1.
// Ejemplo de código para prueba de adición de assets
it('should add new group into the array', () => {
    const controlArray = component.secondFormGroup.controls['assets'] as FormArray;
    component.addAsset();
    component.addAsset();
    expect(controlArray.length).toBe(2);
});

¿Cuáles son los errores comunes a evitar al realizar pruebas?

Uno de los errores más comunes es intentar realizar un spec en bloques incorrectos como describe, donde el componente y sus instancias aún no se han creado en beforeEach. De este modo, ten en cuenta:

  • Siempre utiliza beforeEach para inicializar las instancias y componentes necesarios antes de ejecutar cualquier it.
  • Mueve cualquier lógica o pruebas dentro de un bloque it para asegurar que se ejecute en el contexto correcto.

Al seguir estas directrices y consejos, no solo desarrollas pruebas unitarias robustas, sino que también garantizas la consistencia y previsibilidad en el ciclo de vida de tus aplicaciones Angular. Con la práctica, te volverás más eficiente al escribir pruebas unitarias, asegurando que tu código se mantenga impecable y libre de bugs. ¡Adelante, sigue aprendiendo y mejorando tus habilidades!