Tests unitaires et d'intégration automatisés
Automatiser l’écriture de tests
L’écriture de tests est souvent repoussée par manque de temps. Avec Codex, vous pouvez générer une couverture de tests complète en quelques minutes.
Générer des tests unitaires
La manière la plus simple de commencer :
"Génère les tests unitaires pour src/lib/pricing.ts.
Utilise Vitest. Couvre tous les cas limites : prix négatif,
remise > 100%, devise invalide, quantité zéro."
Résultat typique de Codex :
// src/lib/pricing.test.ts
import { describe, it, expect } from "vitest";
import { calculatePrice, applyDiscount, formatPrice } from "./pricing";
describe("calculatePrice", () => {
it("calcule le prix total pour une quantité positive", () => {
expect(calculatePrice(10, 3)).toBe(30);
});
it("retourne 0 pour une quantité de zéro", () => {
expect(calculatePrice(10, 0)).toBe(0);
});
it("lance une erreur pour un prix négatif", () => {
expect(() => calculatePrice(-5, 1)).toThrow("Prix invalide");
});
});
describe("applyDiscount", () => {
it("applique une remise standard", () => {
expect(applyDiscount(100, 20)).toBe(80);
});
it("refuse une remise supérieure à 100%", () => {
expect(() => applyDiscount(100, 150)).toThrow();
});
});
Codex analyse le code source, identifie les fonctions exportées, comprend leur logique, et génère des tests qui couvrent les chemins normaux et les cas limites.
Générer des tests d’intégration
Pour les tests d’intégration (routes API, services avec base de données), donnez plus de contexte :
"Génère les tests d'intégration pour src/api/routes/orders.ts.
Utilise supertest pour les requêtes HTTP. Mocke le service
Stripe avec vi.mock. Teste les scénarios : création de commande,
commande avec produit inexistant, paiement échoué."
Codex comprend la différence entre tests unitaires et d’intégration. Il configure les mocks appropriés, gère le setup/teardown de la base de données de test, et simule les interactions avec les services externes.
Couvrir un projet entier
Pour un projet qui manque de tests, lancez une tâche globale :
"Analyse tous les fichiers .ts dans src/lib/ et src/services/.
Pour chaque fichier qui n'a pas de fichier .test.ts correspondant,
génère les tests unitaires. Vise une couverture de branches > 80%."
Codex va traiter fichier par fichier, en créant des tests adaptés à chaque module. C’est une tâche qui peut prendre plusieurs minutes, mais le résultat est une suite de tests complète.
Améliorer des tests existants
Codex ne génère pas seulement de nouveaux tests — il améliore les existants :
"Analyse les tests dans src/__tests__/. Identifie :
- Les tests qui ne testent qu'un seul chemin (happy path)
- Les assertions trop vagues (toBeTruthy au lieu de toBe)
- Les tests qui partagent de l'état mutable
Corrige ces problèmes."
Tests par type de composant
| Type de code | Type de test | Instruction Codex |
|---|---|---|
| Fonction utilitaire | Unitaire | « Teste toutes les entrées et sorties possibles » |
| Route API | Intégration | « Teste avec supertest, mocke les services externes » |
| Composant React | Rendu | « Teste le rendu et les interactions avec Testing Library » |
| Service avec DB | Intégration | « Utilise une DB de test, reset entre chaque test » |
Configurer AGENTS.md pour les tests
Ajoutez une section dédiée aux tests dans votre AGENTS.md :
## Tests
- Framework : Vitest
- Commande : `npm run test`
- Couverture : `npm run test:coverage`
- Convention : fichiers .test.ts à côté du code source
- Mocks : utiliser vi.mock(), pas de mocks manuels
- Assertions : préférer toBe/toEqual à toBeTruthy/toBeFalsy
- Chaque test doit être indépendant (pas d'état partagé)
Avec ces instructions dans AGENTS.md, Codex appliquera automatiquement vos conventions pour tous les tests qu’il génère.
Points clés à retenir
- Codex génère des tests adaptés à votre code, pas des tests génériques
- Précisez les cas limites que vous voulez couvrir dans vos instructions
- Codex distingue tests unitaires et tests d’intégration
- Utilisez AGENTS.md pour définir vos conventions de test
- Codex peut améliorer des tests existants, pas seulement en créer de nouveaux