đ„ Guide Complet des Tests E2Eï
Ce guide centralise toutes les informations sur les tests End-to-End avec Playwright et la génération de vidéos de documentation vivante.
đŻ Introductionï
Les tests E2E de KoproGo testent toute la stack :
â Frontend (Astro + Svelte)
â Backend (Rust + Actix-web)
â Base de donnĂ©es (PostgreSQL)
â API REST
â PWA + Mode Offline
Chaque test peut enregistrer une vidéo de démonstration : générez-les localement, puis ajoutez les fichiers .webm dans docs/_static/videos/ pour enrichir la documentation.
đ DĂ©marrage Rapideï
Installation (une seule fois)ï
# Installer les dépendances frontend
cd frontend
npm install
# Installer Playwright et Chromium
npx playwright install chromium
DĂ©marrer les servicesï
# Depuis la racine du projet
make up
# Les services démarrent automatiquement via Docker Compose + Traefik
# Frontend: http://localhost
# API: http://localhost/api/v1
Lancer les testsï
# Tests normaux (rapides)
cd frontend
npm run test:e2e
# OU depuis la racine
make test-e2e
# Tests ralentis (pour vidĂ©os plus lisibles) â
make test-e2e-slow
đč Enregistrer de Nouveaux Testsï
MĂ©thode 1 : Playwright Codegen (â RecommandĂ©)ï
Enregistrement interactif - Playwright génÚre le code automatiquement !
# Assurer que l'app tourne
make up
# Lancer l'enregistrement
cd frontend
npm run codegen
# OU pour mobile
npm run codegen:mobile
# Alternative depuis la racine
make codegen
make codegen DEVICE=mobile
Ce qui se passe :
Un navigateur sâouvre sur
http://localhostUne fenĂȘtre âPlaywright Inspectorâ sâouvre Ă cĂŽtĂ©
Vous naviguez dans lâapp (clic, remplissage de formulaires, etc.)
Le code du test apparaĂźt en temps rĂ©el dans lâInspector
Vous copiez le code et le collez dans un fichier
.spec.ts
Sauvegarder le test :
// frontend/tests/e2e/mon-test.spec.ts
import { test, expect } from '@playwright/test';
test('Mon scénario de test', async ({ page }) => {
await page.goto('/login');
await page.fill('input[type="email"]', 'test@test.com');
await page.fill('input[type="password"]', 'test123');
await page.click('button[type="submit"]');
await expect(page.locator('text=Dashboard')).toBeVisible();
});
Lancer le test :
npm run test:e2e -- mon-test.spec.ts
La vidéo sera dans frontend/test-results/ !
MĂ©thode 2 : Ăcrire le Test Manuellementï
Si vous préférez écrire le code directement :
# Créer le fichier
nano frontend/tests/e2e/mon-test.spec.ts
# Ăcrire le test (voir exemple ci-dessus)
# Lancer
npm run test:e2e -- mon-test.spec.ts
đ CrĂ©er des VidĂ©os Plus Lisiblesï
Pour que les vidéos soient plus faciles à suivre, utilisez le mode ralenti :
make test-e2e-slow
Ce qui se passe automatiquement :
â Ajoute
await page.waitForTimeout(1000)aprĂšs chaque action (click, fill, etc.)â Lance les tests E2E
â GĂ©nĂšre les vidĂ©os localement (1 seconde entre chaque action = plus lisible !)
â Restaure automatiquement la vitesse normale aprĂšs
Délai personnalisé :
# 2 secondes entre chaque action
bash .claude/scripts/slow-down-tests.sh 2000
cd frontend && npm run test:e2e
bash .claude/scripts/restore-test-speed.sh
Restaurer manuellement :
make test-e2e-restore-speed
đ Ajouter les VidĂ©os dans la Documentationï
Une fois les tests exécutés en local, synchronisez et versionnez les vidéos :
# Copie les vidéos + génÚre la page RST automatiquement
make docs-sync-videos
# Générer la documentation Sphinx
make docs-sphinx
# Vérifier le rendu localement
open docs/_build/html/e2e-videos.html
Les fichiers copiĂ©s dans docs/_static/videos/ doivent ĂȘtre commitĂ©s dans Git. Ils seront ensuite publiĂ©s automatiquement par le workflow documentation (.github/workflows/docs.yml).
Le dossier docs/_build/ reste local (ignoré par Git) : ne le commitez pas.
Les vidĂ©os validĂ©es sont listĂ©es dans la page đ„ VidĂ©os Tests E2E (Documentation Vivante).
đŹ Commandes Disponiblesï
Commandes npm (depuis frontend/)ï
# Enregistrement interactif
npm run codegen # Desktop
npm run codegen:mobile # iPhone 13
# Tests
npm run test:e2e # Tous les tests (headless)
PLAYWRIGHT_BASE_URL=http://localhost npm run test:e2e -- AdminDashBoard.improved.spec.ts # Suite admin
npm run test:e2e -- mon-test.spec.ts # Un test spécifique
npm run test:e2e:ui # Mode UI (interface graphique)
npm run test:e2e:headed # Voir le navigateur
npm run test:e2e:debug # Mode debug pas Ă pas
# Rapports
npm run test:e2e:report # Ouvre le rapport HTML avec vidéos
Commandes make (depuis la racine)ï
# Tests E2E
make test-e2e # Tests normaux (rapides)
make test-e2e-slow # Tests ralentis (vidéos lisibles)
make test-e2e-restore-speed # Restaurer vitesse normale
# Documentation
make docs-sync-videos # Copier vidéos + générer RST (local)
make docs-with-videos # Helper local pour générer vidéos + doc
make docs-sphinx # Générer doc Sphinx seule
make codegen # Playwright codegen (DEVICE=mobile pour iPhone 13)
Les cibles make test-e2e et make docs-with-videos exportent automatiquement PLAYWRIGHT_BASE_URL=http://localhost pour cibler lâenvironnement Traefik local.
đ Structure des Fichiersï
Tests E2Eï
frontend/tests/e2e/
âââ config.ts # Helper pour construire les endpoints
âââ AdminDashBoard.improved.spec.ts # Suite complĂšte admin (org/users/buildings)
VidĂ©os GĂ©nĂ©rĂ©esï
frontend/test-results/
âââ admin-dashboard-tour-test-chromium/
â âââ video.webm # â VidĂ©o du test
â âââ trace.zip # Trace Playwright
â âââ test-failed-1.png # (si Ă©chec)
âââ autre-test-chromium/
âââ video.webm
Documentation VidĂ©osï
docs/_static/videos/
âââ admin-dashboard-tour.webm
âââ login-success.webm
âââ *.webm # Toutes vos vidĂ©os
docs/e2e-videos.rst # Page auto-générée
âïž Configuration Playwrightï
Le fichier frontend/playwright.config.ts configure :
Enregistrement vidéo :
video: { mode: 'on', size: { width: 1280, height: 720 } }Base URL :
baseURL: 'http://localhost:3000'WebServer : Démarre automatiquement
npm run devTimeouts : 10s par action, 30s par page
Screenshots : Uniquement en cas dâĂ©chec
đ Debuggingï
Mode UI (RecommandĂ©)ï
cd frontend
npm run test:e2e:ui
Cela ouvre une interface graphique oĂč vous pouvez :
â Voir tous vos tests
â Les lancer un par un
â Voir les vidĂ©os/screenshots
â Inspecter chaque Ă©tape
â Voir les timings
Mode Debugï
npm run test:e2e:debug
Le test sâarrĂȘte Ă chaque Ă©tape, vous pouvez :
Inspecter le DOM
Exécuter du code dans la console
Avancer pas Ă pas
đ ProblĂšmes Courantsï
â Lâapp nâest pas accessibleï
# Vérifier que les services tournent
curl http://localhost
curl http://localhost/api/v1/health
# Si pas de réponse, démarrer :
make up
â Timeout lors des testsï
Augmentez les timeouts dans playwright.config.ts :
use: {
actionTimeout: 20000, // 20s au lieu de 10s
navigationTimeout: 60000, // 60s au lieu de 30s
}
â Les vidĂ©os ne sont pas gĂ©nĂ©rĂ©esï
Vérifiez dans playwright.config.ts :
video: {
mode: 'on', // Doit ĂȘtre 'on', pas 'retain-on-failure'
}
â âTarget page has been closedâï
Votre app redirige trop vite. Ajoutez des attentes :
await page.click('button');
await page.waitForURL('/dashboard');
đ Best Practicesï
Noms de tests explicites
// â Bon test('Login admin et navigation vers dashboard organisations', ...) // â Mauvais test('test', ...)
Utiliser les rĂŽles ARIA
// â Bon (plus robuste) await page.getByRole('button', { name: 'Se connecter' }).click(); // â Ăviter (fragile) await page.click('.btn-login');
Attentes explicites
// â Bon await expect(page.getByText('Dashboard')).toBeVisible(); // â Ăviter await page.waitForTimeout(5000);
One test, one scenario
Chaque test doit tester UN scénario utilisateur complet.
Vidéos lisibles
Utilisez
make test-e2e-slowpour créer des vidéos de documentation.
đ IntĂ©gration CI/CDï
Les vidĂ©os ne sont plus gĂ©nĂ©rĂ©es dans la CI : elles doivent provenir dâun run local fiable, puis ĂȘtre ajoutĂ©es au dĂ©pĂŽt.
Le workflow .github/workflows/docs.yml se charge ensuite de publier la documentation Sphinx (et toutes les vidéos déjà présentes dans docs/_static/videos/) vers GitHub Pages.
đ Ressourcesï
Documentation Playwright : https://playwright.dev
Page vidĂ©os : đ„ VidĂ©os Tests E2E (Documentation Vivante)
Scripts :
.claude/scripts/README.mdConfiguration :
frontend/playwright.config.tsMakefile : đ ïž Guide des Commandes Make
đ€ Guide maintenu avec Claude Code
KoproGo ASBL - Tests E2E et Documentation Vivante