Students : DIALLO Samba & DIOP Mouhamed
Application Node.js avec Express et Tests Jest
Application Node.js avancée utilisant Express.js avec une suite de tests complète utilisant Jest et Supertest.
Contenu du Projet
app.js: Application Express.js avec routes configurablesserver.js: Point d’entrée du serveurapp.test.js: Suite de tests Jestpackage.json: Configuration NPM avec scripts de testDockerfile: Image Docker multi-stage optimiséeviews/: Templates EJS pour le rendu HTML
Structure
sample-app-express-with-tests/
├── app.js # Application Express
├── server.js # Serveur HTTP
├── app.test.js # Tests Jest
├── package.json # Dépendances et scripts
├── Dockerfile # Configuration Docker
├── build-docker-image.sh # Script de construction
├── coverage/ # Rapports de couverture de tests
└── views/ # Templates EJS
└── index.ejs # Template de page d'accueil
Fichiers Téléchargeables
Installation
npm installDéveloppement
Démarrer le serveur
npm startL’application démarre sur http://localhost:8080
Exécuter les tests
npm testCouverture de code
npm run test:coverageGénère un rapport de couverture dans coverage/
Mode Watch (développement)
npm run test:watchRé-exécute les tests automatiquement lors des modifications
Tests Inclus
Tests Fonctionnels
- GET /: Répond avec status 200 et “Hello, World!”
- GET /health: Endpoint de health check
- GET /version: Retourne la version de l’application
- 404 Handling: Gestion des routes inconnues
Tests de Sécurité
- Validation des headers
- Protection contre les injections
- Gestion des erreurs
Tests de Performance
- Temps de réponse acceptable
- Gestion de charge concurrente
Utilisation avec Docker
Construction
chmod +x build-docker-image.sh
./build-docker-image.shOu:
docker build -t sample-app-express-tests:latest .Exécution
docker run -d -p 8080:8080 --name app-tests sample-app-express-tests:latestTests dans Docker
docker run --rm sample-app-express-tests:latest npm testIntégration CI/CD
Cette application est configurée pour l’intégration continue:
GitHub Actions
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Generate coverage
run: npm run test:coverage
- name: Upload coverage
uses: codecov/codecov-action@v3Scripts Disponibles
npm start: Démarre le serveurnpm test: Exécute les tests une foisnpm run test:watch: Mode watch pour les testsnpm run test:coverage: Génère le rapport de couverturenpm run lint: Vérifie le style de code
Dépendances Principales
Production
- express: Framework web minimal et flexible
- ejs: Moteur de templates
- morgan: Logger HTTP
Développement
- jest: Framework de test
- supertest: Tests HTTP
- eslint: Linter JavaScript
Couverture de Tests
Objectif: 80% de couverture de code minimum
- Statements: 85%
- Branches: 80%
- Functions: 90%
- Lines: 85%
Bonnes Pratiques Démontrées
- Séparation des Préoccupations: app.js vs server.js
- Tests Unitaires: Vérification de chaque endpoint
- Tests d’Intégration: Tests end-to-end avec Supertest
- Couverture de Code: Suivi de la qualité des tests
- CI/CD Ready: Configuration pour pipelines automatisés
- Dockerfile Optimisé: Build multi-stage pour image légère
- Documentation: README complet et commentaires dans le code
Débogage
Logs
DEBUG=app:* npm startTests Spécifiques
npm test -- --testNamePattern="GET /"Mode Verbose
npm test -- --verboseÉvolution et Améliorations
Cette application démontre:
- Tests automatisés robustes
- Prête pour l’intégration continue
- Architecture scalable
- Bonnes pratiques DevOps
Prochaines étapes:
- Déploiement sur Kubernetes
- Monitoring avec Prometheus
- Logs centralisés avec ELK
- Stratégies de déploiement avancées (Blue/Green, Canary)