Projet React - Formulaire d'inscription
Application React de formulaire d'inscription avec validation des champs et sauvegarde des donnees valides dans le localStorage.
Pre-requis
- Git
- Node.js (version 18 ou superieure recommandee)
- npm (installe avec Node.js)
Cloner et installer le projet
git clone https://github.com/sqwado/ci-cd-formulaire-inscription.git
cd ci-cd-formulaire-inscription
npm install
Lancer et ouvrir l'application
npm start
Puis ouvrir http://localhost:3000 dans le navigateur.
Executer les tests
npm run test
Description fonctionnelle
Cette application React permet a un utilisateur de s'inscrire avec un formulaire contenant :
- nom
- prenom
- date de naissance
- ville
- code postal
Les donnees valides sont sauvegardees dans le localStorage du navigateur sous la cle formData.
Regles de validation
Les controles sont centralises dans src/module/module.js.
- Le nom, le prenom et la ville doivent contenir uniquement des lettres, avec prise en charge des espaces, apostrophes et tirets.
- L'email doit respecter un format standard
utilisateur@domaine.extension. - La date de naissance doit etre une vraie date au format
YYYY-MM-DD,YYYY/MM/DD,DD/MM/YYYYouDD-MM-YYYY. - L'utilisateur doit avoir au moins 18 ans.
- Le code postal doit correspondre a un code postal francais metropolitain ou d'outre-mer valide.
Fonctionnement
Au chargement, l'application tente de recuperer les donnees deja sauvegardees dans le localStorage.
Lors de l'envoi du formulaire :
- les donnees sont lues avec
FormData; - chaque champ est valide par les fonctions du module ;
- si tout est valide, les donnees sont sauvegardees dans
localStorage; - un message de succes est affiche ;
- en cas d'erreur, un message explicite est affiche et rien n'est sauvegarde.
Tests et couverture
La commande de test lance Jest via react-scripts, avec la couverture Istanbul.
npm run test
Exemple de resultat console :
$ npm run test
> ci-cd-formulaire-inscription@0.1.0 test
> react-scripts test --watchAll=false --coverage --collectCoverageFrom=src/**/*.{js,jsx} --collectCoverageFrom=!src/reportWebVitals.js --collectCoverageFrom=!src/index.js
PASS src/module/module.test.js
PASS src/App.test.js
------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
src | 100 | 100 | 100 | 100 |
App.js | 100 | 100 | 100 | 100 |
src/module | 100 | 100 | 100 | 100 |
module.js | 100 | 100 | 100 | 100 |
------------|---------|----------|---------|---------|-------------------
Test Suites: 2 passed, 2 total
Tests: 66 passed, 66 total
Snapshots: 0 total
Time: 2.075 s
Ran all test suites.
Le script exclut src/index.js et src/reportWebVitals.js de la couverture, conformement a l'enonce.
Les tests couvrent :
- les fonctions unitaires de validation dans
src/module/module.test.js; - le rendu et les interactions du composant React dans
src/App.test.js; - le parcours d'integration reel du formulaire jusqu'a la sauvegarde dans
localStoragedanssrc/App.test.js.
La couverture attendue est de 100% sur les fichiers testes.