# Ejecutar pruebas de Angular en un contenedor


## Requisitos previos

Completa todas las secciones anteriores de esta guía, empezando por [Containerizar una aplicación Angular](/guides/angular/run-tests/containerize/).

## Descripción general

Las pruebas son una parte crítica del proceso de desarrollo. En esta sección aprenderás a:

- Ejecutar pruebas unitarias con Jasmine usando Angular CLI dentro de un contenedor Docker.
- Usar Docker Compose para aislar tu entorno de pruebas.
- Garantizar consistencia entre pruebas locales y en contenedor.

El proyecto `docker-angular-sample` viene preconfigurado con Jasmine, así que puedes empezar rápido sin configuración adicional.

---

## Ejecutar pruebas durante el desarrollo

La aplicación `docker-angular-sample` incluye un archivo de prueba de ejemplo en la siguiente ubicación:

```console
$ src/app/app.component.spec.ts
```

Esta prueba usa Jasmine para validar la lógica de AppComponent.

### Paso 1: Actualizar compose.yaml

Añade un nuevo servicio llamado `angular-test` a tu archivo `compose.yaml`. Este servicio te permite ejecutar tu suite de pruebas en un entorno containerizado aislado.

```yaml {hl_lines="22-26",linenos=true}
services:
  angular-dev:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "5173:5173"
    develop:
      watch:
        - action: sync
          path: .
          target: /app

  angular-prod:
    build:
      context: .
      dockerfile: Dockerfile
    image: docker-angular-sample
    ports:
      - "8080:8080"

  angular-test:
    build:
      context: .
      dockerfile: Dockerfile.dev
    command: ["npm", "run", "test"]
```

El servicio angular-test reutiliza el mismo `Dockerfile.dev` usado para [desarrollo](/guides/angular/run-tests/develop/) y sustituye el comando por defecto para ejecutar pruebas con `npm run test`. Esta configuración garantiza un entorno de pruebas consistente con tu configuración de desarrollo local.

Tras completar los pasos anteriores, el directorio del proyecto debería contener los siguientes archivos:

```text
├── docker-angular-sample/
│ ├── Dockerfile
│ ├── Dockerfile.dev
│ ├── .dockerignore
│ ├── compose.yaml
│ ├── nginx.conf
│ └── README.Docker.md
```

### Paso 2: Ejecutar las pruebas

Para ejecutar tu suite de pruebas dentro del contenedor, ejecuta el siguiente comando desde la raíz del proyecto:

```console
$ docker compose run --rm angular-test
```

Este comando:

- Inicia el servicio `angular-test` definido en tu archivo `compose.yaml`.
- Ejecuta el script `npm run test` usando el mismo entorno que en desarrollo.
- Elimina el contenedor automáticamente al terminar las pruebas, con el comando [`docker compose run --rm`](/reference/cli/docker/compose/run/).

Deberías ver una salida similar a la siguiente:

```shell
Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        1.529 s
```

> [!NOTE]
> Para más información sobre los comandos de Compose, consulta la [referencia de la CLI de Compose](/reference/cli/docker/compose/).

---

## Resumen

En esta sección aprendiste a ejecutar pruebas unitarias de tu aplicación Angular dentro de un contenedor Docker con Jasmine y Docker Compose.

Esto es lo que lograste:

- Crear un servicio `angular-test` en `compose.yaml` para aislar la ejecución de pruebas.
- Reutilizar `Dockerfile.dev` de desarrollo para garantizar consistencia entre entornos de desarrollo y pruebas.
- Ejecutar pruebas dentro del contenedor con `docker compose run --rm angular-test`.
- Garantizar pruebas fiables y repetibles en todos los entornos sin depender de la configuración de tu máquina local.

---

## Recursos relacionados

Consulta referencias oficiales y buenas prácticas para mejorar tu flujo de pruebas con Docker:

- [Referencia de Dockerfile](/reference/dockerfile/) – Entiende todas las instrucciones y la sintaxis de Dockerfile.
- [Buenas prácticas para escribir Dockerfiles](/develop/develop-images/dockerfile_best-practices/) – Escribe Dockerfiles eficientes, mantenibles y seguros.
- [Referencia del archivo Compose](/compose/compose-file/) – Aprende la sintaxis completa y las opciones para configurar servicios en `compose.yaml`.
- [Referencia de la CLI `docker compose run`](/reference/cli/docker/compose/run/) – Ejecuta comandos puntuales en un contenedor de servicio.

---

## Próximos pasos

A continuación aprenderás a configurar un pipeline de CI/CD con GitHub Actions para compilar y probar automáticamente tu aplicación Angular en un entorno containerizado. Esto valida tu código en cada push o pull request, manteniendo consistencia y fiabilidad en todo el flujo de desarrollo.

