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)

Vitest : le moteur de test

Installer les dépendances :

npm install -D vitest supertest
npm install -D @types/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
}

Important :

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

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

let app:FastifyInstance

beforeAll(async () => {
    app = buildApp()
    await app.ready()
})

afterAll(async () => {
    await app.close()
})
describe("GET /health", () => {
    it("should return status ok", async () => {
        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
  • 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

Commandes utiles :

npm run test -- --watch

→ relance automatique des tests

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