Aller au contenu principal

🧪 Guide de test

Ce guide détaille comment tester un utilitaire Pithos : quand utiliser chaque niveau, les outils à disposition, les commandes et les objectifs de couverture.

Pour comprendre la stratégie de test multi-couches et pourquoi elle existe, consultez la page Stratégie de test.


Quand utiliser chaque niveau

SituationApproche recommandée
Nouvelle fonctionCommencer par les tests standard, ajouter des property-based pour les invariants
Types union dans l'APIAjouter des tests `[🎯]` pour chaque branche
Score de mutation < 100%Ajouter des tests `[👾]` ciblés pour les mutants survivants
Domaine d'entrée complexeAjouter des tests `[🎲]` avec les arbitraires appropriés
Rapport de bugÉcrire un test qui échoue d'abord, puis corriger

Outils utilisés dans Pithos

OutilObjectifDocumentation
VitestExécuteur de tests avec support TypeScriptGuide
StrykerTests de mutationDocs
fast-checkTests property-basedTutoriels

Exécuter les tests

Pithos fournit plusieurs commandes de test selon ce que vous voulez vérifier, d'une exécution complète rapide aux tests de mutation ciblés sur un seul fichier :

# Exécuter tous les tests
pnpm test

# Exécuter les tests avec rapport de couverture
pnpm coverage

# Exécuter les tests de mutation (projet entier)
pnpm test:mutation

# Exécuter les tests de mutation sur un fichier spécifique
pnpm stryker run --mutate 'packages/pithos/src/arkhe/object/evolve.ts'

Objectifs de couverture

MétriqueObjectifPourquoi
Couverture de code100%Base : s'assurer que tout le code s'exécute
Score de mutation100%S'assurer que les tests vérifient réellement le comportement
Tests property-based1-5 par fonctionExplorer automatiquement les cas limites
Couverture des cas limitesTous les types union + `@note`S'assurer que les contrats d'API sont testés

La philosophie

« Un test qui passe quand le code est faux est pire que pas de test du tout : il donne une fausse confiance. »

Chaque préfixe raconte une histoire :

  • Pas de préfixe : « C'est le comportement attendu »
  • [🎯] : « Ceci couvre une branche d'API spécifique »
  • [👾] : « Ceci tue un mutant spécifique »
  • [🎲] : « Ceci vérifie qu'un invariant tient pour n'importe quelle entrée »

Quand vous voyez un test qui échoue, le préfixe vous dit immédiatement pourquoi ce test existe et quel type de bug vous avez.