web:api:prisma-fastify:p6

Ceci est une ancienne révision du document !


Tests API (Vitest + Supertest)

Mettre en place des tests automatisés reproductibles pour une API Node.js (Fastify), afin de :

  • valider les endpoints HTTP
  • éviter les régressions
  • tester sans interface graphique (Next.js pas nécessaire)

Installer les dépendances :

npm install -D vitest supertest

Exemple :

/src
  app.ts
  modules/
/tests
  user.test.ts

Dans app.ts :

import Fastify from "fastify"

export const buildApp = () => {
  const app = Fastify()
  app.get("/health", async () => {
    return { status: "ok" }
  })
  return app
}
<WRAP important> Important :

ne pas faire app.listen() ici on exporte une fonction pour créer une instance propre à chaque test </sxh>

Créer /tests/health.test.ts :

import { describe, it, expect } from "vitest"
import request from "supertest"
import { buildApp } from "../src/app"

describe("GET /health", () => {
  it("should return status ok", async () => {
    const app = buildApp()
const res = await request(app.server)
  .get("/health")

expect(res.status).toBe(200)
expect(res.body.status).toBe("ok")
  })
})

Dans package.json :

{
  "scripts": {
    "test": "vitest"
  }
}

Lancer les tests :

npm run test

Exemple :

describe("POST /users", () => {
  it("should create a user", async () => {
    const app = buildApp()

const res = await request(app.server)
  .post("/users")
  .send({
    email: "test@test.com",
    password: "123456"
  })

expect(res.status).toBe(201)
expect(res.body.data.email).toBe("test@test.com")
  })
})

⚠️ Point critique : les tests doivent être isolés Solutions :

SQLite en mémoire (recommandé pour les étudiants) ou base dédiée “test”

Exemple simple avec reset :

beforeEach(async () => {
  await prisma.user.deleteMany()
})

1 test = 1 comportement ne pas dépendre d’un autre test utiliser des données simples vérifier : status HTTP structure de réponse données retournées

❌ Tester uniquement les services→ on veut tester l’API HTTP complète ❌ Utiliser des mocks partout→ tests irréalistes ❌ Ne pas nettoyer la base→ tests instables (flaky)

À la fin :

les endpoints sont testés automatiquement les tests sont relançables à l’infini aucune dépendance à Next.js base solide pour le front

Commandes utiles :

npm run test -- --watch

→ relance automatique des tests

  • web/api/prisma-fastify/p6.1775024285.txt.gz
  • Dernière modification : il y a 5 jours
  • de jcheron