Entorno de pruebas
Los tests corren con Vitest en un entornojsdom. vitest.config.ts carga
como setupFiles el archivo src/test/setup.ts, que mockea globalmente:
next/image: se reemplaza por un<img>plano que reenvíaalt,srcy el resto de props.next/link: se reemplaza por un<a>que reenvíahrefy el resto de props.next/navigation:usePathname()siempre devuelve"/";useRouter()devuelve un objeto conpush,replace,backyprefetchcomo spies de Vitest (vi.fn());useSearchParams()yuseParams()devuelven valores vacíos.
Los tests conviven con el código
No hay una carpeta__tests__ separada: cada módulo vive junto a su test,
foo.ts junto a foo.test.ts (o su equivalente .tsx). Vitest los descubre
con el patrón src/**/*.{test,spec}.{ts,tsx}.
Qué queda fuera de cobertura
La configuración de cobertura devitest.config.ts excluye:
src/**/*.{test,spec}.{ts,tsx}— los propios archivos de test no cuentan para su propia cobertura.src/components/ui/**— primitivos shadcn/ui, código de terceros.src/components/admin/**ysrc/components/dashboard/**— paneles admin y dashboard, que se cubren en una pasada dedicada (sesión/API).src/app/**/page.tsx,src/app/**/layout.tsxysrc/app/**/not-found.tsx— wrappers de ruta de Next.js, con poca lógica propia.src/generated/**— el cliente de Prisma generado.src/test/**,src/types/**,src/**/*.d.ts,src/app/api/auth/**ysrc/data/**.
Los umbrales de cobertura configurados son statements 75%, functions 75%,
lines 80% y branches 65%.