import { defineConfig } from "vitest/config"; /** * Environnement `node` par défaut (démarrage quasi instantané). Les rares * fichiers qui ont besoin du DOM déclarent leur propre environnement via un * docblock en tête de fichier : * * // @vitest-environment jsdom * * Aucun test ne démarre de conteneur ni de vraie base : les routes API sont * testées via `fastify.inject()` avec un faux pool (test/helpers/fakePool.js), * et les tests a11y parsent le HTML statique avec jsdom + axe-core. */ export default defineConfig({ test: { environment: "node", // Pool laissé au défaut (forks) : mesuré contre les alternatives sur cette // suite, 401 tests — // forks (défaut) : 3,5 s // threads, isolate: true : lent // threads, isolate: false : 18,8 s (mise en place de jsdom pénalisée) // L'intuition « threads sans isolation = plus rapide » est fausse ici. // Re-mesurer avant de changer. include: ["apps/*/test/**/*.test.js"], reporters: ["default"], coverage: { provider: "v8", reporter: ["text", "lcov"], include: ["apps/api/src/**/*.js"], // migrate.js s'exécute au démarrage du conteneur et appelle process.exit : // le couvrir demanderait une vraie base, ce qu'on s'interdit ici. // server.js n'est qu'un point d'entrée (5 lignes), la logique est dans app.js. exclude: ["apps/api/src/migrate.js", "apps/api/src/server.js"], // Seuils = cliquet anti-régression. Ils ne prouvent PAS que les tests // vérifient quelque chose (seule la mutation le fait, cf. `npm run // test:mutation`), mais ils empêchent d'ajouter du code non exécuté. thresholds: { statements: 85, branches: 80, functions: 85, lines: 85, }, }, }, });