import { defineConfig } from "vitest/config"; /** * Config Vitest du profil de mutation COMPLET (`npm run test:mutation:full`). * * Deux réglages, tous deux mesurés sur l'overhead d'amorçage que Stryker paie * à CHAQUE activation de mutant (ligne « net / overhead » du dry-run) : * * 1. Ne charger que les tests API. Le fichier a11y initialise jsdom (~2 s) et * ne couvre aucune ligne de l'API : le charger reviendrait à payer ce coût * 1500 fois. * * 2. Workers `threads` sans ré-isolation. Mesuré sur ce jeu de fichiers : * forks, isolate:true (défaut) : overhead 12 844 ms * forks, isolate:false : overhead 7 064 ms * threads, isolate:false : overhead 1 592 ms ← retenu * Le temps net des tests, lui, ne bouge presque pas (~1 s) : l'amorçage * représentait 90 % du cycle. * * À NE PAS reporter dans vitest.config.js : la suite complète contient le * test a11y, et sous jsdom ce même réglage est nettement PLUS lent (18,8 s * contre 3,5 s). Le bon réglage dépend du jeu de fichiers — re-mesurer. * * L'isolation ne protège de rien ici : chaque fichier de test construit sa * propre app et son propre faux pool, il n'y a aucun état global mutable. */ export default defineConfig({ test: { environment: "node", pool: "threads", poolOptions: { threads: { isolate: false, singleThread: true } }, // Stryker parallélise déjà entre mutants (concurrency) : paralléliser aussi // les fichiers à l'intérieur d'un worker ne ferait que se disputer les cœurs. fileParallelism: false, include: ["apps/api/test/**/*.test.js"], reporters: ["default"], }, });