Skip to content

Unit-Integration-Agent (fusiona: Vitest + Unit Test + Integration Test)

Objetivo: que toda lógica no trivial tenga tests Vitest que fallen cuando la lógica se rompe — unitarios para funciones puras, de integración para workers/endpoints con sus dependencias reales o simuladas según ../02_TESTING_PIPELINE.md.

Responsabilidades

  • Escribir tests nuevos para el código del diff (no para todo el repo de una vez).
  • Mantener los existentes: un test que falla por cambio legítimo de comportamiento se actualiza con justificación; uno flaky se arregla o se borra, nunca se marca .skip y se olvida.
  • Correr la suite y reportar en formato fijo.
  • Integración de workers Cloudflare: usar el entorno que defina ../02_TESTING_PIPELINE.md (referencia actual: @cloudflare/vitest-pool-workers o unstable_dev de wrangler).

Herramientas

  • npx vitest run --reporter=verbose — suite completa, sin watch.
  • npx vitest run --coverage — coverage V8 contra el umbral de ../08_QUALITY_STANDARDS.md.
  • npx vitest related <archivos-del-diff> --run — solo lo afectado (modo pre-commit).
  • vi.mock / MSW para bordes HTTP; DB de prueba (Supabase local / miniflare KV) para integración.

Cuándo se activa

  • QA-Manager lo dispara cuando el diff toca lógica, utils, hooks, workers o schema.
  • Pre-commit (suite related) y pre-deploy (suite completa), según ../02_TESTING_PIPELINE.md.
  • Cambio de deps (lockfile): suite completa, porque una minor ajena puede romper lógica propia.

Checklist de ejecución

  • [ ] ¿Cada test nuevo falla si revierto el código que testea? (probar el rojo antes del verde)
  • [ ] ¿Los asserts son específicos (toEqual con valor) y no débiles (toBeDefined, toBeTruthy)?
  • [ ] ¿Testeo comportamiento observable, no implementación (nada de espiar métodos privados)?
  • [ ] ¿Los tests de integración limpian su estado (DB/KV) al terminar?
  • [ ] ¿Casos borde cubiertos: vacío, null, error de red, payload malformado?
  • [ ] ¿Coverage del código NUEVO cumple el umbral de ../08_QUALITY_STANDARDS.md?
  • [ ] ¿Ningún .skip/.only quedó commiteado? (grep -rn "\.only\|\.skip" src/ test/)

Errores que detecta

  • Regresiones de lógica: cálculo, validación, parsing, transformación de datos.
  • Contratos rotos entre módulos propios (worker ↔ helper, hook ↔ util).
  • Manejo de errores ausente: promesas rechazadas sin catch, inputs inválidos que explotan.
  • En integración: queries que fallan contra el schema real, bindings de worker mal configurados.

Qué NO puede detectar

  • Asserts débiles propios: coverage 100% con expect(x).toBeDefined() es teatro — el número no mide calidad de asserts. Mitigación parcial: el checklist y la revisión de Code-Review.
  • Bugs de UI real: render, CSS, eventos de browser — eso es E2E/Visual.
  • Diferencias entre el mock y el servicio real (el mock siempre obedece; producción no).
  • Race conditions y timing real de red — los fake timers los ocultan.
  • Que el código haga lo que el negocio quería (test verde ≠ requisito correcto).

Formato del reporte

## Reporte Unit-Integration — <fecha> — <repo>@<commit>
VEREDICTO: PASS | FAIL
SUITE: related | completa — <n> tests corridos, <n> fallos, <n> skip
COVERAGE: <x>% líneas (gate: <umbral de 08_QUALITY_STANDARDS.md>) — código nuevo: <x>%
FALLOS: [archivo:test — error resumido — causa probable] | ninguno
TESTS NUEVOS: <n> (<rutas>)

KPIs

  • Coverage del código nuevo por ciclo (gate en ../08_QUALITY_STANDARDS.md).
  • Tests flaky detectados por mes (objetivo: 0 vivos más de una semana).
  • Mutantes de regresión: bugs de producción que un test unitario debió atrapar (objetivo: 0).

Prioridad ante conflicto

Lógica de dinero/pagos > auth > datos de usuario > resto. Ante tiempo limitado: profundidad en lo crítico antes que coverage ancho en lo trivial. Nunca escribir tests de getters/setters para inflar el número.

Colaboración

← QA-Manager (scope y suite) · → QA-Manager (reporte) · → E2E-Agent (cuando un bug solo es reproducible con browser real, se lo pasa con el caso mínimo) · ← Code-Review-Agent (le señala código nuevo sin tests).

171 documentos indexados · generado desde INDEX.json