Tests
arka-deck utilise deux pipelines de tests : Vitest pour les tests unitaires et d’intégration légers, Playwright pour les tests end-to-end UI.
Vitest — unit + integration
Section intitulée « Vitest — unit + integration »Lancer tous les tests
Section intitulée « Lancer tous les tests »npm testMode watch
Section intitulée « Mode watch »npm run test:watchCibler un fichier
Section intitulée « Cibler un fichier »npm test -- core/use-cases/projects/build-for-projects.test.tsCibler un pattern
Section intitulée « Cibler un pattern »npm test -- --grep "purge"Coverage
Section intitulée « Coverage »npm test -- --coverageCouverture v8 produite dans coverage/. Le seuil bloquant en CI est défini dans vitest.config.ts.
Convention de placement
Section intitulée « Convention de placement »Les tests vivent à côté du code testé :
core/use-cases/projects/├── build-for-projects.ts├── build-for-projects.test.ts ← tests unitaires└── build-for-projects.integration.test.ts ← tests d'intégration (optionnel)
adapters/inbound/web/server/src/__tests__/└── projects-routes.test.ts ← tests serveurPour les routes HTTP, les tests vivent dans adapters/inbound/web/server/src/__tests__/.
Fakes et test doubles
Section intitulée « Fakes et test doubles »core/_fakes/ contient les implémentations de ports outbound réutilisables en test :
InMemoryFilesystemInMemoryEventBus(= impl prod et test, pas de fake distinct)InMemoryChatSessionStoreFakeClock({ now: () => new Date('2026-01-01T00:00:00Z') })FakeIdGenerator({ next: () => 'test-id-N' })- etc.
Importer depuis les tests :
import { InMemoryFilesystem } from '../../../core/_fakes/in-memory-filesystem.js';Playwright — E2E
Section intitulée « Playwright — E2E »Installer Playwright
Section intitulée « Installer Playwright »npm run e2e:install(Télécharge Chromium et ses dépendances.)
Lancer les E2E
Section intitulée « Lancer les E2E »npm run e2eLe test démarre le serveur arka-deck, ouvre l’UI dans un Chromium headless, et joue les scénarios définis dans e2e/.
Tests E2E disponibles
Section intitulée « Tests E2E disponibles »| Fichier | Scénario |
|---|---|
e2e/smoke.spec.ts | Lancement serveur + chargement UI + health check |
| autres | À ajouter selon les flows critiques |
Anti-patterns à éviter
Section intitulée « Anti-patterns à éviter »Mocker globalement fs
Section intitulée « Mocker globalement fs »❌ Ne pas mocker fs ou node:fs directement. Utilisez InMemoryFilesystem injecté en deps.
Test qui dépend de l’ordre
Section intitulée « Test qui dépend de l’ordre »❌ Vitest peut paralléliser. Les tests doivent être isolés (pas d’état partagé entre tests).
Test qui dépend d’une horloge réelle
Section intitulée « Test qui dépend d’une horloge réelle »❌ Utiliser FakeClock ou vi.useFakeTimers().
Couverture artificielle
Section intitulée « Couverture artificielle »❌ Ne pas écrire de test “vide” juste pour couvrir une ligne. Préférer la suppression du code mort.
Voir aussi
Section intitulée « Voir aussi »- Architecture hexagonale (ADR 0001) : ../../adr/0001-architecture-hexagonale.md
- Conventions de contribution : ./conventions (à venir)
- CI gates : ./ci-gates (à venir)