# Test Coverage Plan (Español) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/COVERAGE_PLAN.md) · 🇪🇹 [am](../../../am/docs/ops/COVERAGE_PLAN.md) · 🇸🇦 [ar](../../../ar/docs/ops/COVERAGE_PLAN.md) · 🇦🇿 [az](../../../az/docs/ops/COVERAGE_PLAN.md) · 🇧🇬 [bg](../../../bg/docs/ops/COVERAGE_PLAN.md) · 🇧🇩 [bn](../../../bn/docs/ops/COVERAGE_PLAN.md) · 🇧🇦 [bs](../../../bs/docs/ops/COVERAGE_PLAN.md) · 🇨🇿 [cs](../../../cs/docs/ops/COVERAGE_PLAN.md) · 🇩🇰 [da](../../../da/docs/ops/COVERAGE_PLAN.md) · 🇩🇪 [de](../../../de/docs/ops/COVERAGE_PLAN.md) · 🇬🇷 [el](../../../el/docs/ops/COVERAGE_PLAN.md) · 🇪🇪 [et](../../../et/docs/ops/COVERAGE_PLAN.md) · 🇮🇷 [fa](../../../fa/docs/ops/COVERAGE_PLAN.md) · 🇫🇮 [fi](../../../fi/docs/ops/COVERAGE_PLAN.md) · 🇫🇷 [fr](../../../fr/docs/ops/COVERAGE_PLAN.md) · 🇮🇪 [ga](../../../ga/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [gu](../../../gu/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [ha](../../../ha/docs/ops/COVERAGE_PLAN.md) · 🇮🇱 [he](../../../he/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [hi](../../../hi/docs/ops/COVERAGE_PLAN.md) · 🇭🇷 [hr](../../../hr/docs/ops/COVERAGE_PLAN.md) · 🇭🇺 [hu](../../../hu/docs/ops/COVERAGE_PLAN.md) · 🇦🇲 [hy](../../../hy/docs/ops/COVERAGE_PLAN.md) · 🇮🇩 [id](../../../id/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [ig](../../../ig/docs/ops/COVERAGE_PLAN.md) · 🇮🇹 [it](../../../it/docs/ops/COVERAGE_PLAN.md) · 🇯🇵 [ja](../../../ja/docs/ops/COVERAGE_PLAN.md) · 🇬🇪 [ka](../../../ka/docs/ops/COVERAGE_PLAN.md) · 🇰🇭 [km](../../../km/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [kn](../../../kn/docs/ops/COVERAGE_PLAN.md) · 🇰🇷 [ko](../../../ko/docs/ops/COVERAGE_PLAN.md) · 🇱🇹 [lt](../../../lt/docs/ops/COVERAGE_PLAN.md) · 🇱🇻 [lv](../../../lv/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [ml](../../../ml/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [mr](../../../mr/docs/ops/COVERAGE_PLAN.md) · 🇲🇾 [ms](../../../ms/docs/ops/COVERAGE_PLAN.md) · 🇲🇹 [mt](../../../mt/docs/ops/COVERAGE_PLAN.md) · 🇲🇲 [my](../../../my/docs/ops/COVERAGE_PLAN.md) · 🇳🇵 [ne](../../../ne/docs/ops/COVERAGE_PLAN.md) · 🇳🇱 [nl](../../../nl/docs/ops/COVERAGE_PLAN.md) · 🇳🇴 [no](../../../no/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [or](../../../or/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [pa](../../../pa/docs/ops/COVERAGE_PLAN.md) · 🇵🇭 [phi](../../../phi/docs/ops/COVERAGE_PLAN.md) · 🇵🇱 [pl](../../../pl/docs/ops/COVERAGE_PLAN.md) · 🇵🇹 [pt](../../../pt/docs/ops/COVERAGE_PLAN.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/COVERAGE_PLAN.md) · 🇷🇴 [ro](../../../ro/docs/ops/COVERAGE_PLAN.md) · 🇷🇺 [ru](../../../ru/docs/ops/COVERAGE_PLAN.md) · 🇱🇰 [si](../../../si/docs/ops/COVERAGE_PLAN.md) · 🇸🇰 [sk](../../../sk/docs/ops/COVERAGE_PLAN.md) · 🇸🇮 [sl](../../../sl/docs/ops/COVERAGE_PLAN.md) · 🇷🇸 [sr](../../../sr/docs/ops/COVERAGE_PLAN.md) · 🇸🇪 [sv](../../../sv/docs/ops/COVERAGE_PLAN.md) · 🇰🇪 [sw](../../../sw/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [ta](../../../ta/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [te](../../../te/docs/ops/COVERAGE_PLAN.md) · 🇹🇭 [th](../../../th/docs/ops/COVERAGE_PLAN.md) · 🇹🇷 [tr](../../../tr/docs/ops/COVERAGE_PLAN.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/COVERAGE_PLAN.md) · 🇵🇰 [ur](../../../ur/docs/ops/COVERAGE_PLAN.md) · 🇺🇿 [uz](../../../uz/docs/ops/COVERAGE_PLAN.md) · 🇻🇳 [vi](../../../vi/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [yo](../../../yo/docs/ops/COVERAGE_PLAN.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/COVERAGE_PLAN.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/COVERAGE_PLAN.md) --- Última actualización: 2026-06-28 > Estado medido el 2026-05-13: líneas 82.58%, sentencias 82.58%, funciones 84.23%, ramas 75.22%. Las fases 1-5 están completas. El enfoque actual es la fase 6 (>=85%) y la fase 7 (>=90%). ## Línea base Existen varias cifras de cobertura según cómo se calcule el informe. Para la planificación, solo una de ellas resulta útil. | Métrica | Alcance | Sentencias / Líneas | Ramas | Funciones | Notas | | ---------------------- | -------------------------------------------------------------- | ------------------: | -----: | --------: | ------------------------------------------------------------- | | Heredada | Antiguo `npm run test:coverage` | 79.42% | 75.15% | 67.94% | Inflada: cuenta los archivos de prueba y excluye `open-sse` | | Diagnóstico | Solo código fuente, excluyendo pruebas y excluyendo `open-sse` | 68.16% | 63.55% | 64.06% | Útil únicamente para aislar `src/**` | | Línea base recomendada | Solo código fuente, excluyendo pruebas e incluyendo `open-sse` | 82.58% | 75.22% | 84.23% | Esta es la línea base de todo el proyecto que se debe mejorar | La línea base recomendada es la cifra que se debe optimizar. ## Reglas - Los objetivos de cobertura se aplican a los archivos de código fuente, no a `tests/**`. - `open-sse/**` forma parte del producto y debe permanecer dentro del alcance. - El código nuevo no debe reducir la cobertura en las áreas modificadas. - Es preferible probar el comportamiento y los resultados de las ramas en lugar de los detalles de implementación. - Para `src/lib/db/**`, es preferible usar bases de datos SQLite temporales y fixtures pequeños en lugar de mocks amplios. ## Conjunto actual de comandos - `npm run test:coverage` - Puerta principal de cobertura del código fuente para el conjunto de pruebas unitarias - Genera `text-summary`, `html`, `json-summary` y `lcov` - `npm run coverage:report` - Informe detallado archivo por archivo de la ejecución más reciente - `npm run test:coverage:legacy` - Solo para comparación histórica ## Hitos | Fase | Objetivo | Enfoque | Estado | | ------ | -------------------------: | ---------------------------------------------------------------- | ------------- | | Fase 1 | 60% de sentencias / líneas | Mejoras rápidas y cobertura de utilidades de bajo riesgo | ✅ Completada | | Fase 2 | 65% de sentencias / líneas | Fundamentos de la base de datos y las rutas | ✅ Completada | | Fase 3 | 70% de sentencias / líneas | Validación de proveedores y análisis de uso | ✅ Completada | | Fase 4 | 75% de sentencias / líneas | Traductores y utilidades de `open-sse` | ✅ Completada | | Fase 5 | 80% de sentencias / líneas | Manejadores de `open-sse` y ramas del ejecutor | ✅ Completada | | Fase 6 | 85% de sentencias / líneas | Casos límite más difíciles, deuda de ramas y suites de regresión | En curso | | Fase 7 | 90% de sentencias / líneas | Revisión final, cierre de brechas y umbral incremental estricto | Pendiente | La cobertura de ramas y funciones debe aumentar progresivamente con cada fase, pero el principal objetivo estricto es la cobertura de sentencias / líneas. ## Puntos críticos prioritarios Estos archivos tienen actualmente la cobertura de líneas más baja (< 60%) y ofrecen el mejor retorno para las fases 6-7. Generado a partir de `coverage/coverage-summary.json` el 2026-05-13: | # | Archivo | Líneas % | | --- | ------------------------------------------------------------ | -------: | | 1 | `open-sse/services/compression/validation.ts` | 7.87% | | 2 | `src/app/api/v1/batches/route.ts` | 9.67% | | 3 | `src/app/docs/components/FeedbackWidget.tsx` | 9.80% | | 4 | `open-sse/services/compression/toolResultCompressor.ts` | 10.00% | | 5 | `src/app/docs/components/DocCodeBlocks.tsx` | 10.63% | | 6 | `open-sse/services/compression/engines/rtk/lineFilter.ts` | 10.96% | | 7 | `open-sse/services/specificityRules.ts` | 11.28% | | 8 | `src/mitm/systemCommands.ts` | 12.19% | | 9 | `open-sse/services/compression/aggressive.ts` | 12.77% | | 10 | `src/app/api/v1/batches/[id]/cancel/route.ts` | 12.98% | | 11 | `open-sse/services/compression/progressiveAging.ts` | 13.26% | | 12 | `open-sse/services/compression/engines/rtk/smartTruncate.ts` | 13.43% | | 13 | `open-sse/services/compression/engines/rtk/deduplicator.ts` | 13.51% | | 14 | `src/lib/cloudAgent/agents/jules.ts` | 13.52% | | 15 | `open-sse/services/compression/lite.ts` | 14.46% | | 16 | `src/app/api/v1/rerank/route.ts` | 14.94% | | 17 | `open-sse/services/compression/preservation.ts` | 15.07% | | 18 | `src/lib/cloudAgent/agents/codex.ts` | 15.54% | | 19 | `open-sse/services/tierResolver.ts` | 16.66% | | 20 | `src/app/docs/components/DocsLazyWrapper.tsx` | 16.66% | Temas para las fases 6-7: - `open-sse/services/compression/**` es el grupo más denso de baja cobertura y representa la mayor parte de la brecha restante. - Las rutas de API de lotes y reclasificación (`src/app/api/v1/batches/**`, `src/app/api/v1/rerank/route.ts`) necesitan pruebas a nivel de manejador. - Los adaptadores de agentes en la nube (`src/lib/cloudAgent/agents/jules.ts`, `codex.ts`) y `tierResolver.ts` necesitan pruebas de escenarios. - Los componentes de la interfaz de usuario de la documentación y `src/mitm/systemCommands.ts` tienen menor prioridad, pero permiten obtener mejoras de cobertura de ramas con poco esfuerzo. ## Lista de verificación de ejecución ### Fase 1: 56.95% -> 60% - [x] Corregir la métrica de cobertura para que refleje el código fuente en lugar de los archivos de prueba - [x] Mantener un script de cobertura heredado para realizar comparaciones - [x] Registrar en el repositorio la línea base y los puntos críticos - [ ] Añadir pruebas específicas para utilidades de bajo riesgo: - `src/shared/utils/upstreamError.ts` - `src/shared/utils/fetchTimeout.ts` - `src/lib/api/errorResponse.ts` - `src/shared/utils/apiAuth.ts` - `src/lib/display/names.ts` - [ ] Añadir pruebas de rutas para: - `src/app/api/settings/require-login/route.ts` - `src/app/api/providers/[id]/models/route.ts` ### Fase 2: 60% -> 65% - [ ] Añadir pruebas respaldadas por base de datos para: - `src/lib/db/modelComboMappings.ts` - `src/lib/db/settings.ts` - `src/lib/db/registeredKeys.ts` - [ ] Cubrir el comportamiento de las ramas en: - `src/lib/providers/validation.ts` - `src/app/api/v1/embeddings/route.ts` - `src/app/api/v1/moderations/route.ts` ### Fase 3: 65% -> 70% - [ ] Añadir pruebas de análisis de uso para: - `src/lib/usage/usageHistory.ts` - `src/lib/usage/usageStats.ts` - `src/lib/usage/costCalculator.ts` - [ ] Ampliar la cobertura de rutas para la gestión del proxy y las ramas de configuración ### Fase 4: 70% -> 75% - [ ] Cubrir las funciones auxiliares del traductor y las rutas centrales de traducción: - `open-sse/translator/index.ts` - `open-sse/translator/helpers/*` - `open-sse/translator/request/*` - `open-sse/translator/response/*` ### Fase 5: 75% -> 80% - [ ] Añadir pruebas a nivel de manejador para: - `open-sse/handlers/chatCore.ts` - `open-sse/handlers/responsesHandler.js` - `open-sse/handlers/imageGeneration.js` - `open-sse/handlers/embeddings.js` - [ ] Añadir cobertura de ramas del ejecutor para la autenticación específica de cada proveedor, los reintentos y las sobrescrituras de endpoints ### Fase 6: 80% -> 85% - [ ] Integrar más conjuntos de pruebas de casos límite en la ruta principal de cobertura - [ ] Aumentar la cobertura de funciones para los módulos de base de datos con cobertura insuficiente de constructores y funciones auxiliares - [ ] Cerrar las brechas de cobertura de ramas en `settings.ts`, `registeredKeys.ts`, `validation.ts` y las funciones auxiliares del traductor ### Fase 7: 85% -> 90% - [ ] Tratar como bloqueantes los archivos restantes con baja cobertura - [ ] Añadir pruebas de regresión para cada error de producción no cubierto que se corrija durante el avance hacia el 90% - [ ] Aumentar el umbral de cobertura en CI solo después de que la línea base local se mantenga estable durante al menos dos ejecuciones consecutivas ## Política de incremento progresivo Actualiza los umbrales de `npm run test:coverage` solo después de que el proyecto supere realmente el siguiente hito con un margen cómodo. **Umbral actual:** `npm run test:coverage` exige **60 sentencias / 60 líneas / 60 funciones / 60 ramas** (la métrica se recalculó en Quality-Gates Fase 6A.1; la referencia anterior del 82.58% estaba inflada porque contabilizaba los archivos de prueba y excluía `open-sse`). El comando `test:coverage:legacy` conserva la métrica anterior de 50/50/50 para fines de comparación histórica. Para realizar comprobaciones puntuales de umbrales con el informe más reciente, usa: ```bash node scripts/check/test-report-summary.mjs --threshold 75 ``` Secuencia recomendada de incrementos (el orden es `sentencias-líneas / ramas / funciones`): 1. 55/60/55 2. 60/62/58 3. 65/64/62 4. 70/66/66 5. 75/70/72 <-- umbral actual (75/70/75) 6. 80/75/78 7. 85/80/84 8. 90/85/88 El siguiente objetivo de incremento es `80/75/78` una vez que la cobertura de ramas se mantenga por encima del 78% durante dos ejecuciones consecutivas. ## Brecha conocida El comando de cobertura actual mide la suite principal de pruebas unitarias de Node e incluye el código fuente alcanzado desde ella, incluido `open-sse`. Todavía no combina la cobertura de Vitest en un único informe consolidado. Merece la pena realizar esa integración más adelante, pero no es un impedimento para comenzar el avance del 60% al 80%.