🧪 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
| Situation | Approche recommandée |
|---|---|
| Nouvelle fonction | Commencer par les tests standard, ajouter des property-based pour les invariants |
| Types union dans l'API | Ajouter des tests `[🎯]` pour chaque branche |
| Score de mutation < 100% | Ajouter des tests `[👾]` ciblés pour les mutants survivants |
| Domaine d'entrée complexe | Ajouter des tests `[🎲]` avec les arbitraires appropriés |
| Rapport de bug | Écrire un test qui échoue d'abord, puis corriger |
Outils utilisés dans Pithos
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étrique | Objectif | Pourquoi |
|---|---|---|
| Couverture de code | 100% | Base : s'assurer que tout le code s'exécute |
| Score de mutation | 100% | S'assurer que les tests vérifient réellement le comportement |
| Tests property-based | 1-5 par fonction | Explorer automatiquement les cas limites |
| Couverture des cas limites | Tous 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.