Skip to content

Tester des requêtes

Tester des API construites avec Express.js en utilisant Vitest et supertest est une approche efficace pour effectuer des tests d'intégration. supertest est une bibliothèque qui permet de faire des requêtes HTTP à votre application Express, ce qui est idéal pour tester des routes et des réponses d'API. Voici comment vous pouvez procéder :

Étape 1: Installation des Dépendances

Tout d'abord, assurez-vous d'avoir Vitest, supertest et express installés dans votre projet. Si ce n'est pas le cas, vous pouvez les installer via npm ou yarn :

bash
npm install express supertest vitest --save-dev
npm install express supertest vitest --save-dev

Étape 2: Configurer votre Application Express

Créez une application Express simple pour la démonstration :

javascript
// app.js
import express from 'express'
const app = express();

app.get('/api/hello', (req, res) => {
  res.status(200).json({ message: 'Hello World!' });
});

export default app;
// app.js
import express from 'express'
const app = express();

app.get('/api/hello', (req, res) => {
  res.status(200).json({ message: 'Hello World!' });
});

export default app;

Étape 3: Écrire les Tests avec Vitest et Supertest

Maintenant, écrivez un test pour vérifier que votre route fonctionne comme prévu :

javascript
// app.test.js
import { describe, it, expect } from 'vitest';
import request from 'supertest';
import app from './app';

describe('API tests with supertest and vitest', () => {
  it('GET /api/hello', async () => {
    const response = await request(app).get('/api/hello');
    expect(response.status).toBe(200);
    expect(response.body).toEqual({ message: 'Hello World!' });
  });
});
// app.test.js
import { describe, it, expect } from 'vitest';
import request from 'supertest';
import app from './app';

describe('API tests with supertest and vitest', () => {
  it('GET /api/hello', async () => {
    const response = await request(app).get('/api/hello');
    expect(response.status).toBe(200);
    expect(response.body).toEqual({ message: 'Hello World!' });
  });
});

Dans cet exemple, supertest est utilisé pour envoyer une requête GET à la route /api/hello. Vitest est ensuite utilisé pour vérifier que le statut de la réponse et le corps de la réponse sont ceux attendus.

Points Clés à Considérer

  • Tests d'Intégration vs Tests Unitaires: Ces tests sont des tests d'intégration, car ils testent l'intégration entre différentes parties de votre application (comme les routes et les middleware d'Express). Ils ne sont pas des tests unitaires, qui testent des parties isolées du code.

  • Gestion de l'Environnement de Test: Assurez-vous que votre environnement de test est isolé de votre environnement de production. Cela peut inclure l'utilisation d'une base de données de test distincte ou la configuration de variables d'environnement spécifiques au test.

  • Tests Asynchrones: Notez que les tests avec supertest sont asynchrones. Utilisez async/await pour gérer correctement les opérations asynchrones.

  • Couverture des Cas d'Erreur: N'oubliez pas de tester les cas d'erreur et les comportements inattendus de votre API pour garantir une couverture de test complète.