Généré le 2026-08-31 à partir de npm test / node --test --experimental-test-coverage
/ npm run test:e2e (Node v25.9.0, Playwright/Chromium 1.62). à régénérer
aprĂšs tout changement dans data.js, storage.js, guide-i18n.js,
guide.html ou arc-diagram.html â les chiffres ci-dessous sont une photo,
pas une valeur qui se met Ă jour toute seule.
Deux suites, deux vitesses, deux usages :
npm test # unitaire + intégration DOM (jsdom), ~1s
node --test --experimental-test-coverage # idem + rapport de couverture
npm run test:e2e # navigation dans un vrai Chromium, ~10s
npm test (unitaire + intĂ©gration jsdom)đą 34 / 34 tests passent, 0 Ă©chec, 0 skip â durĂ©e totale â 0.7 s.
| Fichier de test | Tests | Résultat | Portée |
|---|---|---|---|
tests/data.test.js |
6 | â 6/6 | ModĂšle statique + calcul des arcs (data.js) |
tests/storage.test.js |
6 | â 6/6 | Mapping JS â Supabase (storage.js) |
tests/guide-i18n.test.js |
7 | â 7/7 | Dictionnaire FR/EN, pure logique (guide-i18n.js) |
tests/guide-integration.test.js |
10 | â 10/10 | DOM rĂ©el (guide.html, arc-diagram.html) via jsdom |
| Total | 29 | â 29/29 | Â |
npm run test:e2e (navigation, vrai navigateur)đą 6 / 6 tests passent â durĂ©e totale â 3.3 s (4 workers, Chromium headless).
â ïž Contrairement Ă npm test, cette suite fait de vraies requĂȘtes rĂ©seau vers
Supabase (lecture seule â listPeople/listEvents) pour charger
arc-diagram.html. Elle Ă©chouera si Supabase est injoignable, et nâĂ©crit
jamais rien en base (pas de crĂ©ation/Ă©dition/suppression dâĂ©vĂšnement testĂ©e
ici â cf. §5).
| Test | Résultat | Durée |
|---|---|---|
guide.html se charge en français par défaut, sans erreur console |
â | 385ms |
| Le sĂ©lecteur EN traduit le texte et le choix survit Ă un reload | â | 1.3s |
Le lien retour ramĂšne bien vers arc-diagram.html |
â | 1.1s |
arc-diagram.html : le bouton â° ouvre le drawer, qui contient un lien vers le guide |
â | 1.3s |
Cliquer sur le lien Guide dans le drawer navigue vers guide.html |
â | 6.1s |
arc-diagram.html charge les donnĂ©es sans passer en Ă©tat dâerreur |
â | 589ms |
MesurĂ©e par le reporter de couverture intĂ©grĂ© Ă Node (--experimental-test-coverage) â
concerne uniquement les fichiers require()-ables depuis les tests (donc pas
chart.js, cf. §5).
| Fichier | Lignes | Branches | Fonctions | Lignes non couvertes |
|---|---|---|---|---|
data.js |
đĄ 83.96 % | đą 100.00 % | đĄ 71.43 % | 119-145, 174-176 |
guide-i18n.js |
đą 96.20 % | đ 57.89 % | đą 100.00 % | 123-126, 141-142 |
storage.js |
đ 65.55 % | đą 82.35 % | đŽ 44.44 % | 68-72, 74-78, 80-88, 90-99, 101-112 |
| Global (3 fichiers) | đĄ 83.41 % | đą 75.00 % | đĄ 70.83 % |  |
Vue fonction par fonction â plus utile que le %/fichier pour juger si un trou est un problĂšme ou un choix assumĂ©.
data.js| Fonction | Testée | Test(s) | Note |
|---|---|---|---|
pickTitleForType(type) |
â | pickTitleForType() pioche toujours dans le bon pool |
 |
typeColor(type) |
â | typeColor() renvoie une couleur de secours... |
 |
computeArcsForPerson(person, eventsList) |
â | computeArcsForPerson() relie... / ...0 ou 1 Ă©vĂšnement |
 |
initData() |
⏠| â | đ Appelle Supabase (listPeople/listEvents) + construit une Ă©chelle D3 â nĂ©cessite un navigateur, hors pĂ©rimĂštre node --test. |
recomputeArcs() |
⏠| â | Wrapper dâune ligne autour de computeArcsForPerson (dĂ©jĂ testĂ©e) ; pas de logique propre Ă couvrir. |
storage.js| Fonction | Testée | Test(s) | Note |
|---|---|---|---|
toISODate(date) |
â | toISODate() / fromISODate() font un aller-retour fidĂšle |
 |
fromISODate(str) |
â | mĂȘme test + fromISODate() renvoie undefined... |
 |
rowToEvent(row) |
â | rowToEvent() convertit... / ...champs optionnels absents |
 |
eventToRow(evt) |
â | eventToRow() convertit... / ...met null (pas undefined)... |
 |
listPeople() |
⏠| â | đ Appel rĂ©seau Supabase direct, pas de mock DB (choix assumĂ© du projet, cf. CLAUDE.md). |
listEvents() |
⏠| â | đ Idem. |
createEvent(evt) |
⏠| â | đ Idem. |
updateEvent(id, evt) |
⏠| â | đ Idem. |
deleteEvent(id) |
⏠| â | đâ ïž Idem â contient la logique mĂ©tier â0 ligne supprimĂ©e â erreur expliciteâ (cf. commentaire dans le fichier), qui reste donc non vĂ©rifiĂ©e par un test automatisĂ©. Candidat le plus net si vous voulez augmenter la couverture un jour (nĂ©cessiterait un faux client Supabase injectĂ©, pas la vraie base). |
guide-i18n.js| Fonction | Testée | Test(s) | Note |
|---|---|---|---|
pickLang(requested) |
â | pickLang() Ă 2 |
 |
applyLang(lang, root) |
â | 5 tests (applyLang('en')..., applyLang('fr')..., langue non supportĂ©e, data-i18n-aria, indirectement via initLang) |
 |
initLang(root) |
â | initLang() lit la langue... / initLang() branche le sĂ©lecteur... |
 |
bloc catch de applyLang/initLang |
⏠| â | đĄïž ProtĂšge contre un localStorage indisponible (navigation privĂ©e stricte) ; jsdom ne reproduit pas ce cas, donc ces 2 lignes restent hors couverture. Comportement dĂ©fensif, pas un chemin utilisateur normal. |
chart.jsđ« Aucune fonction nâest exĂ©cutĂ©e par node --test (pas dâexport CommonJS,
rendu D3/DOM pur) â mais depuis lâajout de la suite test:e2e, une partie de
ses effets est exercée automatiquement, dans un vrai Chromium :
| Comportement | Fonctions chart.js concernées |
Testé par |
|---|---|---|
boot() charge les donnĂ©es sans passer en Ă©tat dâerreur |
boot(), showStatus(), hideStatus() |
â
test:e2e â âcharge les donnĂ©es⊠sans passer en Ă©tat dâerreurâ |
| Ouverture du drawer au clic sur â° | openDrawer() |
â
test:e2e â âle bouton â° ouvre le drawerâŠâ |
Rendu initial de lâaxe temporel (svg#chart .axis-line) |
render() (partiel â juste sa prĂ©sence) |
â
test:e2e â mĂȘme test |
| Zoom/drag sur la frise, filtres lĂ©gende, panneau dâajout/Ă©dition (clic sur une zone vide ou un nĆud), modal mobile | render() (reste), setFilter(), setTypeFilter(), openAddPanel(), openEditPanel(), openMobileModal(), etc. |
đ« aucun test automatisĂ© â hors pĂ©rimĂštre test:e2e (cf. §5) |
Reste aussi la vérification manuelle ponctuelle faite via Playwright + Chrome
lors de lâimplĂ©mentation du guide (captures desktop/mobile FR/EN) â pas
rejouable automatiquement, contrairement Ă test:e2e.
test:e2e sâarrĂȘte Ă âla page charge et le drawer
sâouvreâ, pas aux interactions D3 fines (zoom, drag, clic sur un nĆud pour
éditer). Le seul filet ici reste la vérification manuelle en navigateur.createEvent, updateEvent, deleteEvent) :
volontairement exclu de test:e2e (cf. §2) â Ă©crirait dans la vraie base
de prod, pas de projet Supabase de test séparé. Testé uniquement cÎté
mapping pur (rowToEvent/eventToRow) dans npm test. listPeople/
listEvents (lecture seule) sont, eux, exercés par test:e2e via le
chargement réel de arc-diagram.html.initData() / recomputeArcs() dans data.js : la lecture réseau
quâils dĂ©clenchent est exercĂ©e indirectement par test:e2e, mais pas leur
logique interne (palette de couleurs, calcul des arcs) â celle-ci reste
testée uniquement via computeArcsForPerson() en isolation (npm test).