Couverture et preuves
Ces règles disent ce que les tests doivent prouver. Le domaine est couvert en entier par ses tests unitaires. Chaque règle métier se prouve là où elle vit, par ce qu’elle accepte et ce à quoi elle résiste : le plus souvent dans un test unitaire. Une commande prouve aussi les events qu’elle publie.
En pratique
Le blocage d’un wallet, prouvé par l’état et par l’event :
ts
// openWallet(currency) and aClosedWallet(currency) build a wallet whose own events are already pulled
describe('Wallet', () => {
it('records the block of its debits', () => {
// Arrange
const wallet = openWallet('EUR');
const reference = aBlockReference();
// Act
const blocked = wallet.block(reference, debitsOnly, at);
// Assert
const events = wallet.pullDomainEvents().map((event) => [event.type, event.payload]);
expect(blocked.ok).toBe(true);
expect(events).toEqual([['WalletBlocked', { reference, directions: debitsOnly }]]);
});
it('refuses to block a closed wallet, and records nothing', () => {
// Arrange
const wallet = aClosedWallet('EUR');
// Act
const blocked = wallet.block(aBlockReference(), debitsOnly, at);
// Assert
expect(blocked.ok ? undefined : blocked.error.type).toBe('WalletIsClosed');
expect(wallet.pullDomainEvents()).toEqual([]);
});
});- Le succès et le refus ont chacun leur test unitaire : ces branches de
blocksont couvertes sans démarrer l’application (COV-01). - Le test vérifie l’event enregistré, son type et son contenu, et qu’un refus n’en enregistre aucun (COV-03).
- Le wallet tient seul la règle « un wallet fermé ne change plus » : son test unitaire suffit, sans test end-to-end (COV-02).
Règles
Preuves
| Code | Règle | Sévérité |
|---|---|---|
| COV-01 | Le domaine est couvert à 100 % | majeure |
| COV-02 | Une règle métier se prouve là où elle vit | mineure |
| COV-03 | Un test de commande vérifie ses events | mineure |