GastosApp cuenta con una suite de 42 tests unitarios ejecutados con Vitest que cubren exclusivamente funciones de lógica pura de los módulosDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Davidmallega/Gastos-App/llms.txt
Use this file to discover all available pages before exploring further.
format.js y compromisos.js. Al no depender de DOM, red ni estado global, los tests se ejecutan en entorno node y completan en aproximadamente 350ms. La configuración de Vitest vive en vite.config.js mediante la clave test, lo que evita un archivo de configuración adicional.
Ejecutar los tests
Archivos de test
| Archivo | Tests | Funciones cubiertas |
|---|---|---|
tests/format.test.js | 24 | formatCLP, formatDate, getPendienteHealth, buildNCMap, calcTotals, parseSIIDate, parseNumber |
tests/compromisos.test.js | 18 | getCompromisoStatus — todos los estados, todas las frecuencias y casos borde del bug semanal corregido |
Helper localStr
Los tests de getPendienteHealth en format.test.js trabajan con fechas relativas al día actual y deben generar cadenas 'YYYY-MM-DD' que representen el día en hora local, no en UTC. El método estándar d.toISOString().slice(0, 10) convierte primero a UTC, lo que en zonas UTC-4 o UTC-5 puede retroceder la fecha un día completo y hacer que el test falle.
Para evitar este problema, el describe de getPendienteHealth en format.test.js define el helper localStr de forma local:
compromisos.test.js no necesitan este helper porque usan fechas fijas (new Date(2026, 5, 8)) o el helper daysFromNow basado en setDate, que opera en tiempo local de forma nativa. Este mismo patrón de evitar UTC es el que usa parseLocalDate en el código de producción, asegurando consistencia entre tests y runtime.
Casos borde documentados
Bug semanal: daysForward === 0 cuando hoy ES el día objetivo
En los compromisos semanales, el cálculo usa (target - dow + 7) % 7 para obtener los días hasta la próxima ocurrencia. Cuando hoy es exactamente el día objetivo, este resultado es 0. El código debe reconocer que daysForward === 0 significa que el vencimiento es hoy (→ 'proximo', con threshold de 2 días para semanales) y no recalcular el estado incorrectamente.
Este caso está cubierto explícitamente en tests/compromisos.test.js con una fecha fija (lunes 8 de junio de 2026):
Casos borde adicionales cubiertos en format.test.js
formatCLP(null)yformatCLP(undefined)→'$0'(sin excepción)formatDate('no-es-fecha')→'—'(manejo silencioso de fecha inválida)buildNCMapcon NC sinfacturaRefId→ el mapa queda vacío (no se acumula ruido)calcTotalscon NC vinculada a factura pagada → el monto pagado se reduce, no el pendienteparseSIIDate(null)→''(sin excepción)parseNumber('')yparseNumber(null)→0
Los tests solo cubren funciones de lógica pura. No hay tests E2E de UI. Para flujos completos se recomienda Playwright (ver deuda técnica).