Cypress : arborescence projet type
cypress/
├─ e2e/ # Tous les tests end-to-end
│ ├─ login/
│ │ └─ login.cy.ts # Tests du module Login
│ │
│ ├─ profile/ # Tests de la fonctionnalité Profile avec Cucumber
│ └─ profile.feature # Fichier de test en langage Gherkin
│ └─ profile.ts # Fichier de Step Definitions correspoandant
│
├─ pages/ # Page Objects (POM hybride)
│ ├─ login/
│ │ └─ loginPage.ts
│ │
│ ├─ profile/
│ │ └─ profilePage.ts
| |
| ├─ basePage.ts # Méthodes transverses (visit, getByTestId…)
| ├─ pageTemplate.ts # Gabarit pour cloner de nouvelles pages
|
│
├─ fixtures/ # Données statiques de test
│ └─ users.json
│
├─ support/ # Helpers globaux Cypress
│ ├─ commands.ts # Custom commands (ex: cy.dataTestid)
│ ├─ index.d.ts # Typages pour autocomplétion TS
│ └─ e2e.ts # Fichier bootstrap exécuté avant tests
│
└─ utils/ # Utils réutilisables hors Cypress
| └─ api.ts # Fonctions utilitaires pour API calls
|
|
│
├─ plugins/ # Plugins Cypress (ex: pour allure, reports, etc.)
│ └─ index.ts
│
├─ cypress.config.ts # Config Cypress (baseUrl, viewport, timeout…)
└─ tsconfig.json # Configuration TypeScript pour CypressLangage du code : Markdown (markdown)
🔹 Points clés de cette structure
1. Pages/ → contient toutes les classes POM.
. BasePage pour les méthodes génériques.
. Chaque page concrète a ses getters et Fluent API.
. pageTemplate.ts pour cloner facilement de nouvelles pages.
2. E2E / → contient les tests d’intégration organisés par fonctionnalité/page.
. Chaque sous-dossier correspond à une feature de l’app.
. Chaque cy ne doit tester qu’une fonctionnalité ou un flux.
3. support/ → contient :
. commands.ts pour les helpers transverses (ex. cy.dataTestid(), cy.resetDatabase()).
. index.d.ts pour le typage TypeScript de tes commandes.
. e2e.ts pour l’initialisation globale (ex. importer commands, hooks globaux comme beforeEach() pour login si nécessaire).
4 Fixtures/ → données statiques utilisées dans les tests.
Ex: utilisateurs de test, payload API, mocks JSON.
5. Utilitaires.
cypress/
└─ utils/
├─ dom.ts # fonctions liées au DOM
├─ api.ts # helpers pour appels HTTP / REST / GraphQL
├─ format.ts # fonctions de formatage (dates, nombres, strings…)
├─ data.ts # générateurs de données aléatoires ou mock
└─ auth.ts # fonctions liées à l’auth (token, cookies…)Langage du code : Markdown (markdown)
. Ex : formatter des dates, générer des tokens JWT, etc.
. Permet de séparer la logique “business utilitaire” du pur POM Cypress.
6. plugins/ → plugins Cypress optionnels (reporting, allure, code coverage…).
7. cypress.config.ts et tsconfig.json → config Cypress + TypeScript pour tout le projet.
🔹 Bonnes pratiques avec cette structure
. Indépendance des tests : chaque it() doit pouvoir être exécuté seul.
. Lisibilité : les tests E2E restent courts et lisibles grâce à POM.
. Réutilisabilité : BasePage + pageTemplate pour créer facilement de nouvelles pages.
. Séparation claire :. Logique de page → pages/ = encapsulation UI (POM hybride)
. Actions transverses → commands.ts
. Données → fixtures/
. Tests → e2e/ = logique métier des scénarios de test