Aller au contenu

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.


Fenêtre de terminal
npm test
Fenêtre de terminal
npm run test:watch
Fenêtre de terminal
npm test -- core/use-cases/projects/build-for-projects.test.ts
Fenêtre de terminal
npm test -- --grep "purge"
Fenêtre de terminal
npm test -- --coverage

Couverture v8 produite dans coverage/. Le seuil bloquant en CI est défini dans vitest.config.ts.


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 serveur

Pour les routes HTTP, les tests vivent dans adapters/inbound/web/server/src/__tests__/.


core/_fakes/ contient les implémentations de ports outbound réutilisables en test :

  • InMemoryFilesystem
  • InMemoryEventBus (= impl prod et test, pas de fake distinct)
  • InMemoryChatSessionStore
  • FakeClock ({ 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';

Fenêtre de terminal
npm run e2e:install

(Télécharge Chromium et ses dépendances.)

Fenêtre de terminal
npm run e2e

Le test démarre le serveur arka-deck, ouvre l’UI dans un Chromium headless, et joue les scénarios définis dans e2e/.

FichierScénario
e2e/smoke.spec.tsLancement serveur + chargement UI + health check
autresÀ ajouter selon les flows critiques

❌ Ne pas mocker fs ou node:fs directement. Utilisez InMemoryFilesystem injecté en deps.

❌ Vitest peut paralléliser. Les tests doivent être isolés (pas d’état partagé entre tests).

❌ Utiliser FakeClock ou vi.useFakeTimers().

❌ Ne pas écrire de test “vide” juste pour couvrir une ligne. Préférer la suppression du code mort.