Structuration des tests
Voici un exemple de structuration du code pour les tests dans une application Express. Nous allons diviser notre application en plusieurs parties pour faciliter l'écriture de tests unitaires et d'intégration ciblés sur des parties spécifiques de l'application.
Structure de base du projet :
project/
│
├── src/
│ ├── controllers/
│ │ ├── userController.js
│ │ └── ...
│ ├── models/
│ │ ├── userModel.js
│ │ └── ...
│ ├── routes/
│ │ ├── userRoutes.js
│ │ └── ...
│ └── app.js
│
└── tests/
├── unit/
│ ├── controllers/
│ │ ├── userController.test.js
│ │ └── ...
│ ├── models/
│ │ ├── userModel.test.js
│ │ └── ...
│ ├── routes/
│ │ ├── userRoutes.test.js
│ │ └── ...
│ └── ...
│
└── integration/
├── userIntegration.test.js
└── ...
Explication de la structure :
-
src/: Ce répertoire contient tout le code source de votre application, y compris les contrôleurs, les modèles, les routes, et le fichier principal de l'application (par exempleapp.js). -
src/controllers/: Ce répertoire contient les contrôleurs de votre application, qui sont responsables de la logique métier et de la gestion des requêtes HTTP. -
src/models/: Ce répertoire contient les modèles de données de votre application, qui définissent la structure et les opérations sur les données de votre application. -
src/routes/: Ce répertoire contient les routes de votre application, qui définissent les endpoints HTTP et les fonctions de contrôleur associées. -
tests/: Ce répertoire contient tous les tests de votre application, divisés en tests unitaires et tests d'intégration. -
tests/unit/: Ce répertoire contient les tests unitaires pour les différentes parties de votre application, tels que les contrôleurs, les modèles, et les routes. Chaque sous-répertoire correspond à une partie spécifique de l'application. -
tests/integration/: Ce répertoire contient les tests d'intégration qui testent le fonctionnement global de votre application, en simulant les requêtes HTTP sur les routes de l'application.
Exemple de fichier de test :
Voici un exemple de fichier de test pour un contrôleur utilisateur (userController.test.js) dans le répertoire tests/unit/controllers/ :
// userController.test.js
const userController = require('../../../src/controllers/userController');
describe('User Controller', () => {
test('Get user by ID', async () => {
// Test the getUserById function of userController
});
test('Create new user', async () => {
// Test the createUser function of userController
});
// Add more tests as needed for other functions of userController
});
Dans cet exemple, nous avons un fichier de test qui teste les différentes fonctions du contrôleur utilisateur (userController). Nous pourrions également avoir des fichiers de test similaires pour les modèles (userModel.test.js), les routes (userRoutes.test.js), et d'autres parties de l'application. Cette structuration permet une organisation claire des tests et facilite la maintenance et l'ajout de nouveaux tests à mesure que l'application évolue.