> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-11-backstage-y-un-futuro-prometedor/testing-con-ia.md).

# Testing con IA

Si hay un capítulo cuya lección es absolutamente intemporal, ese es el capítulo 6. Allí aprendimos que testear no es opcional, que las pruebas deben integrarse desde el principio y que existen diferentes tipos de pruebas para diferentes niveles de confianza.

La IA no cambia esa verdad. Si acaso, la refuerza.

## El triángulo de hierro sigue vigente

En el capítulo 6 hablamos de diferentes niveles de testing: pruebas unitarias, pruebas de UI (Coded UI Tests) e integración con las builds. El famoso "triángulo de pruebas" (o pirámide de testing) sigue siendo la referencia:

* **Base amplia**: muchas pruebas unitarias, rápidas y baratas.
* **Capa media**: pruebas de integración que verifican la comunicación entre componentes.
* **Punta estrecha**: pocas pruebas end-to-end que validan flujos completos.

Este principio no ha cambiado. Lo que ha cambiado son las herramientas y la velocidad con la que podemos escribir tests.

## Herramientas modernas de testing

| Entonces (Cap. 6) | Ahora                                          |
| ----------------- | ---------------------------------------------- |
| MSTest / NUnit    | Jest / Vitest (frontend), xUnit / NUnit (.NET) |
| Coded UI Tests    | Playwright (end-to-end, cross-browser)         |
| Builds con VSTS   | GitHub Actions + pipelines automatizados       |
| Cobertura manual  | Istanbul / c8 (automática, integrada en CI)    |

**Jest y Vitest** son los frameworks de testing más populares para JavaScript/TypeScript. Vitest, en particular, destaca por su velocidad y compatibilidad con el ecosistema de Vite (que Angular puede usar).

**Playwright** es la estrella del testing end-to-end. Desarrollado por Microsoft (sí, la misma Microsoft), permite ejecutar pruebas en Chrome, Firefox y Safari de forma automatizada. Y lo más interesante: puede grabar interacciones del usuario y convertirlas automáticamente en código de test.

## La IA como generadora de tests

Aquí es donde la IA brilla con especial intensidad. Puedes pedirle:

* *"Genera tests unitarios para este servicio de tareas"*.
* *"Escribe un test de Playwright que verifique el flujo de creación de un proyecto"*.
* *"¿Qué casos límite debería testear para esta función de filtrado?"*.

Y la IA generará tests razonables, con buena estructura y cobertura de los casos más comunes. Sin embargo — y esto es crucial — **la IA no sabe qué es lo realmente importante de testear en tu aplicación**. Puede generar tests que pasen, pero que no validen lo que de verdad importa.

Un test que verifica que un botón existe no es lo mismo que un test que verifica que al pulsar ese botón se crea una tarea correctamente, se actualiza la lista, se envía la notificación y se persisten los datos.

## TDD asistido por IA

El Test-Driven Development (TDD) — escribir el test antes que el código — se beneficia enormemente de la IA:

1. **Defines el comportamiento esperado** (el test).
2. **La IA genera una implementación** que haga pasar el test.
3. **Tú revisas** que la implementación sea correcta y mantenible.
4. **Refactorizas** con la confianza de que los tests siguen pasando.

Es un ciclo potente: tú pones la intención, la IA pone la velocidad.

## Testing de componentes Angular

Angular incluye soporte de primera clase para testing de componentes:

```typescript
describe('TaskListComponent', () => {
  it('debería mostrar las tareas del usuario', () => {
    const tareas = [
      { id: 1, titulo: 'Revisar diseño', completada: false },
      { id: 2, titulo: 'Escribir tests', completada: true }
    ];

    const fixture = TestBed.createComponent(TaskListComponent);
    fixture.componentRef.setInput('tareas', tareas);
    fixture.detectChanges();

    const items = fixture.nativeElement.querySelectorAll('.task-item');
    expect(items.length).toBe(2);
  });
});
```

La IA puede generar estos tests automáticamente a partir del componente, pero tú decides los escenarios que realmente importan.

## No te saltes los tests

Un riesgo real de la IA es que, al generar código tan rápido, la tentación de saltarse la fase de testing es mayor. *"Si la IA lo ha generado, funcionará, ¿no?"*. No. El código generado por IA puede contener errores sutiles, casos límite no contemplados y lógica incorrecta que "parece" correcta.

Testea todo. Especialmente el código generado por IA.

## La lección que permanece

La calidad del software se mide por la confianza que puedes depositar en él. Los tests son esa confianza hecha código. La IA puede generar tests más rápido de lo que nunca hubiéramos imaginado, pero la responsabilidad de decidir qué testear, cuándo y con qué profundidad sigue siendo nuestra. Como dijimos en el capítulo 6: integra los tests desde el principio, no los dejes para el final.
