| .. | ||
| baselines | ||
| current | ||
| diffs | ||
| reports | ||
| PHASE1_REPORT.md | ||
| PHASE2_COMPARATIVE_REPORT.md | ||
| PHASE3_CHANGELOG.md | ||
| README.md | ||
| VISUAL_AUDIT_REPORT.md | ||
Visual tests — pixel-accurate baseline & regression
Workflow design engineering : baseline → capture current → pixelmatch diff → report. Aucune modification visuelle sans capture avant/après et diff explicite.
Structure
visual-tests/
├── baselines/ # Référence approuvée (committée). Viewport fixe 1280×720, thème dark.
├── current/ # Captures de la branche en cours (générée par capture script).
├── diffs/ # Images de diff pixelmatch (baseline vs current).
├── reports/ # Rapport HTML + résumé des diffs.
└── PHASE1_REPORT.md # Rapport visuel initial (hiérarchie, densité, alignements, contrastes).
Règles
- Seuil pixelmatch : configurable via
VISUAL_DIFF_THRESHOLD(défaut0.1). Explicite dans les rapports. - Viewport : 1280×720 (desktop) pour les baselines. Breakpoints additionnels optionnels.
- Thème : dark forcé pour reproductibilité (aligné avec l’app en prod).
Commandes
| Commande | Description |
|---|---|
npm run visual:capture |
Playwright : capture écrans + composants → visual-tests/current/. |
npm run visual:update |
Playwright : écrase les baselines → visual-tests/baselines/. |
npm run visual:compare |
pixelmatch baselines vs current → diffs/ + rapport JSON/HTML dans reports/. |
npm run visual:baseline |
Script Node (legacy) : capture → baselines/. |
npm run visual:test |
Lance les tests Playwright de régression (même config). |
Écrans et nommage
- Full page : login, register, 404 (sans auth), dashboard, playlists, library (avec auth).
- Composants : sidebar, header, player (locators ciblés sur
/dashboard). - Nommage :
{screen-name}-{viewport}-{theme}.png(ex.login-desktop-dark.png).
Méthode
- Baseline : une seule fois (ou après refonte validée) →
npm run visual:baseline. Commit des fichiers dansbaselines/. - Avant une PR :
npm run visual:capturepuisnpm run visual:compare. Vérifierreports/et que les diffs correspondent aux changements voulus. - CI :
npm run visual:testcompare les snapshots Playwright aux baselines (même viewport/config). Échec si dépassement du seuil de pixels.
Seuils
- maxDiffPixels (Playwright) :
VISUAL_MAX_DIFF_PIXELS(défaut0en local pour être strict). - pixelmatch threshold :
VISUAL_DIFF_THRESHOLD(défaut 0.1). Au-delà de ce ratio (pixels différents / total), la diff est considérée comme une régression. Documenter dans chaque rapport si modifié.
Procédure de validation visuelle
- Lancer l’app :
npm run dev(ouPLAYWRIGHT_BASE_URLpointant vers l’app). - Capturer l’état courant :
npm run visual:capture→ remplitvisual-tests/current/. - Comparer aux baselines :
npm run visual:compare→ génèrediffs/etreports/. - Interpréter : ouvrir le rapport HTML dans
reports/; vérifier que les écarts correspondent aux changements voulus. - Mettre à jour les baselines (si changements validés) :
npm run visual:updatepuis committervisual-tests/baselines/.
Les stories full layout (App/Layouts/DashboardLayout : Dashboard, Playlists, Library, Settings) peuvent servir de référence visuelle dans Storybook ; pour une régression automatisée, utiliser les tests Playwright (e2e/visual-complete.spec.ts).
Accessibilité (a11y)
Utiliser l’addon a11y de Storybook sur les stories full layout et les composants critiques. Corriger les violations critiques (contraste, focus, labels). Vérifier la navigation clavier (Tab, Enter, Escape) sur Sidebar, Header, modales, player.
Git
- Commiter :
visual-tests/baselines/,visual-tests/README.md,visual-tests/PHASE1_REPORT.md. - Optionnel à ignorer :
visual-tests/current/,visual-tests/diffs/,visual-tests/reports/(générés localement ou en CI).