web:api:prisma-fastify:p6

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
web:api:prisma-fastify:p6 [2026/04/01 08:18] – [Installation] jcheronweb:api:prisma-fastify:p6 [2026/04/01 09:28] (Version actuelle) – [1. Rendre l'application testable] jcheron
Ligne 9: Ligne 9:
  
 ===== Installation ===== ===== Installation =====
 +
 +Vitest : le moteur de test
 +
 Installer les dépendances : Installer les dépendances :
 <sxh bash;gutter:false> <sxh bash;gutter:false>
 npm install -D vitest supertest npm install -D vitest supertest
 +npm install -D @types/supertest
 </sxh> </sxh>
  
Ligne 44: Ligne 48:
 ne pas faire ''app.listen()'' ici ne pas faire ''app.listen()'' ici
 on exporte une fonction pour créer une instance propre à chaque test on exporte une fonction pour créer une instance propre à chaque test
 +</WRAP>
 +
 +Mettre le lancement du serveur dans un fichier à part :
 +
 +<sxh ts>
 +import {buildApp} from "./app";
 +
 +const app = buildApp()
 +
 +app.listen({ port: 3000 }).then(() => {
 +    console.log("Server running on http://localhost:3000")
 +})
 </sxh> </sxh>
  
Ligne 49: Ligne 65:
 Créer ''/tests/health.test.ts'' : Créer ''/tests/health.test.ts'' :
 <sxh ts> <sxh ts>
-import { describe, it, expect } from "vitest" +let app:FastifyInstance
-import request from "supertest" +
-import { buildApp } from "../src/app"+
  
 +beforeAll(async () => {
 +    app = buildApp()
 +    await app.ready()
 +})
 +
 +afterAll(async () => {
 +    await app.close()
 +})
 describe("GET /health", () => { describe("GET /health", () => {
-  it("should return status ok", async () => { +    it("should return status ok", async () => { 
-    const app = buildApp() +        const res = await request(app.server) 
-const res = await request(app.server) +            .get("/health")
-  .get("/health")+
  
-expect(res.status).toBe(200) +        expect(res.status).toBe(200) 
-expect(res.body.status).toBe("ok"+        expect(res.body.status).toBe("ok"
-  })+    })
 }) })
 </sxh> </sxh>
Ligne 102: Ligne 123:
  
 ===== 5. Base de données de test ===== ===== 5. Base de données de test =====
-⚠️ Point critique : les tests doivent être isolés+<wrap important>Point critique : les tests doivent être isolés</wrap> 
 Solutions : Solutions :
  
-SQLite en mémoire (recommandé pour les étudiants) +  * SQLite en mémoire 
-ou base dédiée "test"+  ou base dédiée "test"
  
 Exemple simple avec reset : Exemple simple avec reset :
Ligne 118: Ligne 140:
 ===== 6. Bonnes pratiques ===== ===== 6. Bonnes pratiques =====
  
-1 test = 1 comportement +  * 1 test = 1 comportement 
-ne pas dépendre d’un autre test +  ne pas dépendre d’un autre test 
-utiliser des données simples +  utiliser des données simples 
-vérifier : +  vérifier : 
-status HTTP +    status HTTP 
-structure de réponse +    structure de réponse 
-données retournées+    données retournées
  
  
Ligne 130: Ligne 152:
  
 ===== 7. Erreurs à éviter ===== ===== 7. Erreurs à éviter =====
-❌ Tester uniquement les services→ on veut tester l’API HTTP complète +<WRAP important> 
-❌ Utiliser des mocks partout→ tests irréalistes +  * Tester uniquement les services→ on veut tester l’API HTTP complète 
-❌ Ne pas nettoyer la base→ tests instables (flaky) +  Utiliser des mocks partout→ tests irréalistes 
 +  Ne pas nettoyer la base→ tests instables (flaky) 
 +</WRAP>
 ===== Résultat attendu ===== ===== Résultat attendu =====
 À la fin : À la fin :
  
-les endpoints sont testés automatiquement +  * les endpoints sont testés automatiquement 
-les tests sont relançables à l’infini +  les tests sont relançables à l’infini
-aucune dépendance à Next.js +
-base solide pour le front+
  
  
 ===== Bonus ===== ===== Bonus =====
 Commandes utiles : Commandes utiles :
-<sxh bash>+<sxh bash;gutter:false>
 npm run test -- --watch npm run test -- --watch
 </sxh> </sxh>
  
 → relance automatique des tests → relance automatique des tests
  • web/api/prisma-fastify/p6.1775024285.txt.gz
  • Dernière modification : il y a 5 jours
  • de jcheron