Annuaire Utilisateurs React
Application React avec routing, architecture API découplée (Axios + Backend Python/MySQL)
et stratégie complète de tests (Unitaires + Intégration + E2E) avec CI/CD,
Dockerisation complète et orchestration fullstack.
Objectif pédagogique
Ce projet met en place une architecture complète autour de :
- Tests unitaires
- Tests d'intégration
- Tests E2E avec Cypress
- Isolation du front-end via mocking des appels API
- Gestion des erreurs serveur (400 / 500)
- Couverture de code (Codecov)
- Génération automatique de documentation (JSDoc)
- Pipeline CI/CD avec GitHub Actions
- Publication automatique sur NPM
- Déploiement automatique via GitHub Pages
- Orchestration complète avec Docker Compose
- Tests d’intégration sur environnement réel (Docker)
Technologies
- React
- React Router (HashRouter pour GitHub Pages)
- Axios
- FastAPI (Backend Python)
- MySQL
- Adminer
- Jest
- Cypress
- Docker / Docker Compose
- GitHub Actions
- Codecov
- GitHub Pages
- NPM (Distribution)
Fonctionnalités
- Inscription d'utilisateurs avec validation
- Appels API via Axios (
GET /users,POST /users) - Backend réel connecté à une base MySQL
- Affichage dynamique de la liste des inscrits
- Routing entre Home et Register
- Validation métier (âge, email, code postal...)
- Gestion des erreurs métier (400 -- email déjà existant)
- Gestion des erreurs serveur (500 -- crash backend)
- Tests unitaires et d'intégration Jest avec mocking
- Tests E2E Cypress avec interception réseau
- Tests E2E réels sur environnement Docker
- Publication automatique du package NPM
- Déploiement automatique à chaque push
Architecture
L'application est entièrement découplée :
- Frontend React
- Backend Python (FastAPI)
- Base de données MySQL
Communication :
- Front → API (Axios)
- API → MySQL
Le frontend ne dépend jamais directement de la base de données.
Orchestration Docker
L’ensemble de la stack est orchestré avec Docker Compose :
- Service db → MySQL avec healthcheck
- Service server → API FastAPI
- Service frontend → React
- Service adminer → Interface DB
Ordonnancement sécurisé
- MySQL doit être healthy avant backend
- Backend doit être healthy avant frontend
Cela garantit :
- Aucun démarrage prématuré
- Pas de race condition
- Stabilité de la stack
Lancement Docker
docker compose up -d --build
Accès :
- Frontend : http://localhost:3000/tp-test-mock
- API : http://localhost:8000/users
- Adminer : http://localhost:8080
Stratégie de Tests
Tests Jest (Unitaires + Intégration)
Les appels API sont mockés :
jest.mock('axios')
Aucun appel réseau réel.
Tests Cypress (E2E)
Deux niveaux :
- Tests mockés (intercept)
- Tests réels via Docker (CI)
CI/CD
Pipeline GitHub Actions :
- Installation dépendances
- Génération JSDoc
- Tests Jest + coverage
- Envoi Codecov
- Tests Cypress
- Build React
- Publication NPM
- Lancement Docker Compose
- Test API réel
- Push image DockerHub
- Déploiement GitHub Pages
Docker Integration Tests
La pipeline démarre toute la stack :
docker compose up -d --build
Puis vérifie :
curl http://localhost:8000/users
Si OK → image Docker publiée.
Livrables
-
Dépôt GitHub
https://github.com/tintin0013/tp-test-mock -
Application déployée
https://tintin0013.github.io/tp-test-mock/ -
Documentation JSDoc
https://tintin0013.github.io/tp-test-mock/docs/ -
Codecov
https://codecov.io/gh/tintin0013/tp-test-mock -
DockerHub
https://hub.docker.com/r/tintin0013/ynov-ci-fastapi
Conclusion
Projet complet incluant :
- Architecture fullstack
- Orchestration Docker
- Tests multi-niveaux
- CI/CD industriel
- Déploiement automatisé