manon-ci-cd-ynov
v1.0.4
Published
đŠ Jest-tests
Readme
đŠ Jest-tests
Une application React complĂšte avec validation de formulaire, tests unitaires (jest), tests dâintĂ©gration (React Testing Library), tests E2E (Cypress), couverture de code et pipeline CI fonctionnelle.
đ Description du projet
Jest-tests est une application React avec :
â Un formulaire dâinscription â Validation avancĂ©e (Ăąge, email, postCode, identitĂ©, town) â Tests unitaires pour la logique mĂ©tier â Tests dâintĂ©gration pour les interactions React â Tests E2E avec Cypress â Couverture maximale du code â Pipeline de CI avec Codecov
𧱠Démarrage rapide
1ïžâŁ Clone le dĂ©pĂŽt
git clone https://github.com/myvco/Jest-tests.git cd Jest-tests
2ïžâŁ Installer les dĂ©pendances
npm install
3ïžâŁ Lancer lâapplication en mode dĂ©veloppement
npm run dev
4ïžâŁ Ouvrir le navigateur đ http://localhost:5173
âïž Scripts disponibles đ§Ș Tests Script Description npm run test Lance les tests unitaires avec couvertures npm run coverage GĂ©nĂšre un rapport coverage HTML npm run cypress:run ExĂ©cute les tests E2E
Exemple :
đ§Ș Tests unitaires (jest)
Les tests unitaires sont situés dans :
đ tests/
Ils couvrent :
â validateAge (Ăąge, invalid date, unrealistic, future, <18) â validatePostCode â validateIdentity (types, XSS, invalid chars) â validateEmail â validateTown
Vitest génÚre un rapport de couverture en :
đ coverage/
đ Mocks expliquĂ©s
Pour isoler les tests, certains modules sont mockés :
createUser â contrĂŽlĂ© dans chaque test
getUsers â valeur par dĂ©faut vide
Dans chaque test, on peut surcharger :
getUsers.mockResolvedValue([{ email: "[email protected]" }]);
Cela simule un scĂ©nario dâerreur (email already exists).
đ Tests E2E (Cypress)
đč Cypress teste lâapplication complĂšte dans le navigateur rĂ©el.
Exemple scénario :
â Home page â Navigation vers Form â Submit valide â Validation error backend simuler via cy.intercept()
Exemple dâinterception pour forcer erreur backend cy.intercept("POST", "https://jsonplaceholder.typicode.com/users", { statusCode: 400, body: { message: "Email already exists" } }).as("createUserError");
cy.get('button[type="submit"]').click(); cy.wait("@createUserError"); cy.contains(/email already exists/i).should("be.visible");
đ€ Pipeline CI (GitHub Actions + Codecov) đ Objectif
â ExĂ©cuter les tests unitaires â GĂ©nĂ©rer la couverture â Publier le rapport sur Codecov
Exemple de workflow : .github/workflows/ci.yml name: CI
on: [push, pull_request]
jobs: test: runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: "18"
- run: npm install
- run: npm test -- --coverage
- run: npm run coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
files: ./coverage/lcov.info
fail_ci_if_error: trueđ Ă chaque push/PR, Codecov affiche le coverage Ă jour.
đ Couverture de code
Vitest génÚre :
â text summary â HTML report (coverage/index.html) â LCOV (coverage/lcov.info)
Codecov utilise lcov pour afficher :
đ Coverage global đ Coverage par fichier đ Branch coverage
đĄ Assurez-vous que vitest.config.js inclut les bons patterns :
coverage: { provider: 'v8', reporter: ['text', 'html', 'lcov'], include: [ 'src/utils//*.js', 'src/component//*.jsx' ], exclude: [ 'src/main.jsx', 'src/App.jsx' ] }
đ Package NPM : https://www.npmjs.com/package/manon-ci-cd-ynov
