Mocking vs Stubbing
Testing 🟡 MidDefinition
Le stub fournit des reponses predefinies sans verifier les appels. Le mock verifie en plus que les interactions attendues ont bien eu lieu (nombre d'appels, arguments).
Analogie
Le stub est un distributeur automatique (il donne la reponse), le mock est un serveur de restaurant qui note ce que vous commandez ET verifie que vous avez bien commande.
Exemple de code
// Stub : on ne verifie pas l'appel
vi.spyOn(api, 'fetch').mockReturnValue({ data: 'ok' });
// Mock : on verifie l'interaction
const sendEmail = vi.fn();
await registerUser('alice@mail.com');
expect(sendEmail).toHaveBeenCalledWith('alice@mail.com');
expect(sendEmail).toHaveBeenCalledTimes(1);
Cas d'usage
Utiliser des stubs pour les queries (get data) et des mocks pour les commands (send email, write DB).
Anti-pattern
Sur-mocker en verifiant chaque appel interne, couplant les tests a l'implementation plutot qu'au comportement.