Tests
Un test qui passe doit vouloir dire que le code marche. Cette partie répond à trois questions :
- Comment écrire un test, le ranger, et croire son résultat ? (TST)
- Sur quoi tourne-t-il : quelle base, quels systèmes tiers ? (INF)
- Que doivent prouver les tests ? (COV)
Trois niveaux
| Niveau | Ce qu’il prouve | Fichier | Infrastructure |
|---|---|---|---|
| Unitaire | Le domaine : chaque invariant, chaque refus, chaque calcul | *.spec.ts | Aucune |
| Intégration | Un adapter, sur sa vraie infrastructure | *.integration-spec.ts | La base jetable, ou les stubs du système tiers |
| End-to-end | Un use case, et les règles que le domaine ne tient pas seul, de l’entrée de l’application à la base | *.e2e-spec.ts | L’application démarrée depuis AppModule, la base jetable |
Les tests propres à un building block restent dans son thème : VO-09 pour les value objects, SRV-08 pour les domain services, REP-16 pour les repositories.
En revue de code
- Les tests tournent-ils sur le vrai adapter, depuis les vrais modules ? (TST-01, TST-03)
- Chaque test suit-il Arrange, Act, Assert, avec une seule action ? (TST-04)
- Le test est-il à côté de ce qu’il prouve, et son nom dit-il son niveau ? (TST-05, TST-06)
- Le test dépend-il de l’heure, d’une identité générée, d’une attente ou d’un autre test ? Est-il désactivé, isolé ou relancé ? (TST-07, TST-08)
- Un système tiers est-il simulé depuis son contrat figé, et ses parcours critiques et ses pannes ont-ils leurs stubs ? (INF-03, INF-04)
- Chaque nouvelle branche du domaine a-t-elle son test unitaire ? (COV-01)
- Une nouvelle règle métier a-t-elle sa preuve, au plus bas niveau qui la tient, avec ce qu’elle accepte et ce à quoi elle résiste ? (COV-02)
- Les events publiés sont-ils vérifiés, et un refus n’en publie-t-il aucun ? (COV-03)
Ce dont cette partie a besoin
- Vitest, avec un projet pour les tests unitaires et un pour les tests sur base, et la couverture du domaine en CI (COV-01).
- Docker, pour que Testcontainers démarre la base jetable, en local comme en CI (INF-01).
- Le contrat OpenAPI de chaque système tiers, figé et commité (INF-03).
- Les migrations commitées, qui construisent la base de test comme celle de la production (PER-10).
Thèmes
TST8 règlesÉcrire un testDes tests sur le vrai code, lisibles, bien rangés, et qui donnent toujours le même résultat.Voir les règles →INF5 règlesInfrastructure de testUne base jetable construite par les migrations, des systèmes tiers simulés depuis leur contrat.Voir les règles →COV3 règlesCouverture et preuvesUn domaine couvert en entier, des règles métier mises à l’épreuve, des events vérifiés.Voir les règles →