Testing - Josecgh/diagAuto-frontend GitHub Wiki

Pruebas (Testing)

Herramientas (Tools)

  • Jasmine: Framework de desarrollo guiado por comportamiento (BDD) utilizado para escribir las afirmaciones (assertions) y definir las suites de pruebas.
  • Karma: Ejecutor de pruebas (test runner) oficial de Angular que levanta servidores locales y ejecuta los test en navegadores web reales (Chrome/Edge) con recarga en caliente (Hot Reloading).
  • Angular TestBed: Utilidad nativa del framework para configurar e inyectar módulos, componentes autónomos (Standalone) y servicios simulados en un entorno de pruebas aislado.
  • Karma Coverage: Plugin integrado en la CLI de Angular para generar reportes exhaustivos de cobertura de código (salida resumida en la terminal y archivos HTML detallados en la carpeta coverage/diagauto-frontend/).

Ejecución de las pruebas (Running the tests)

npm run test            # Ejecuta toda la suite de pruebas a través de Karma una vez
npm run test:watch      # Mantiene Karma abierto en modo observador mientras desarrollas
npm run test:coverage   # Pasa las pruebas y genera el reporte de cobertura HTML local

Umbral de cobertura (Coverage threshold)

El proyecto exige de forma estricta un mínimo del 70% de cobertura en líneas, funciones, ramas (branches) y sentencias (statements). Este umbral está configurado dentro del archivo karma.conf.js. El comando npm run test:coverage fallará automáticamente en el servidor de CI si cualquier métrica cae por debajo de este límite:

// karma.conf.js (Configuración del umbral mínimo)
coverageReporter: {
  dir: require('path').join(__dirname, './coverage/diagauto-frontend'),
  subdir: '.',
  reporters: [{ type: 'html' }, { type: 'text-summary' }],
  check: {
    global: { statements: 70, branches: 70, functions: 70, lines: 70 }
  }
}

La medición de cobertura se integró desde el inicio del Sprint 1, asegurando que cada tarea e historia de usuario se entregara con sus respectivas pruebas de regresión.

Sentencias (Statements) Ramas (Branches) Funciones (Functions) Líneas (Lines)
94.15% 91.20% 90.48% 94.62%

Integración Continua (Continuous Integration)

El flujo de trabajo automatizado en .github/workflows/tests.yml se dispara en cada Pull Request hacia la rama main:

- uses: actions/setup-node@v4
  with:
    node-version: 22
    cache: 'npm'
- run: npm ci
- run: npm run test:coverage

Qué probamos en DiagAuto (What we test)

Capa (Layer) Qué se prueba exactamente Ejemplo
Servicios de estado (Signals) Acciones, estados reactivos y reglas de negocio derivadas. Incremento automático del contador de vehículos al mutar la Signal; actualización de la Signal computed al activar filtros.
Servicios de API URL de destino, método HTTP (GET, PATCH) y la estructura del cuerpo enviado (payload). Petición POST /vehicles con los datos del formulario estructurados de forma válida.
Interceptores HTTP Captura de errores globales e inyección automática de datos de red. Captura de un error 403 por límite Freemium excedido y redirección al Paywall; adjuntar cabeceras XSRF.
Enrutador y Guardas Reglas de control de acceso y flujos de navegación privada. Bloqueo de acceso a la pantalla /vehicles/new si el usuario no ha iniciado sesión o si ya tiene 4 vehículos en el plan básico.
Constantes y Utilidades Mapeo de enumeraciones y funciones puras de validación. El validador de matrículas devuelve true ante un formato estándar español (ej: 1234XYZ).
Componentes de Sección Renderizado del DOM, interacciones del usuario y etiquetas de accesibilidad. El botón de "Confirmar Vehículo" se deshabilita mediante [disabled] si el formulario de averías es inválido.
Componentes de Página (Views) Composición estructural y renderizado condicional según el estado de la sesión. La cuadrícula de la agenda (agenda-grid) solo muestra tarjetas si la Signal de vehículos tiene registros.