Les tests e2e (apps/web/cypress/e2e/) étaient de simples specs Cypress (.cy.ts), sans lien avec Cucumber alors qu'apps/api utilise déjà Gherkin pour ses propres tests BDD. Intègre @badeball/cypress-cucumber-preprocessor pour écrire les scénarios utilisateurs en Gherkin des deux côtés, même vocabulaire. - cypress.config.ts : specPattern sur *.feature, wiring du préprocesseur (esbuild bundler + plugin cucumber) - Les 11 fichiers .cy.ts sont remplacés par des paires .feature/.steps.ts (co-localisées, même nom) — conversion complète, comportement équivalent (mêmes intercepts, mêmes assertions) - cypress/support/step_definitions/common.steps.ts : steps partagés entre features (connexion, navigation, assertions génériques de texte/URL/champ) — globaux à toute la suite, réutilisables tels quels - cypress/support/profile.ts : profil du compte "connecté" courant, assemblé au fil de plusieurs Given avant le premier visit/When - README : nouvelle section "Cucumber (apps/web)" (miroir de la section existante pour apps/api), mise à jour des références aux anciens noms de fichiers .cy.ts (déjà obsolètes avant ce changement) Vérification : impossible d'exécuter Cypress dans cet environnement (crash Electron/GPU au lancement, limitation déjà documentée dans le README — reproductible sur main, indépendante de ce changement). À la place : - les 447 steps Gherkin des 11 .feature ont été vérifiés programmatiquement contre les 165 patterns de step enregistrés : 0 non résolu, 0 ambigu - les 11 .feature parsent correctement avec le parser Gherkin officiel (57 scénarios au total) - tous les .steps.ts passent `biome check` (syntaxe + style) sans erreur - CYPRESS_INSTALL_BINARY déjà géré (voir PR précédente) — le binaire est bien présent localement (`cypress verify` OK), donc le blocage est spécifiquement le sandbox GPU de cet environnement, pas l'installation La vraie exécution reste à vérifier via le job `e2e` de la CI GitHub Actions sur cette PR — c'est le chemin déjà documenté dans le README pour cet environnement précis.
37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import { addCucumberPreprocessorPlugin } from "@badeball/cypress-cucumber-preprocessor";
|
|
import { createEsbuildPlugin } from "@badeball/cypress-cucumber-preprocessor/esbuild";
|
|
import createBundler from "@bahmutov/cypress-esbuild-preprocessor";
|
|
import { defineConfig } from "cypress";
|
|
|
|
export default defineConfig({
|
|
e2e: {
|
|
baseUrl: "http://localhost:5173",
|
|
// Scenarios live in `.feature` files (Gherkin), one per
|
|
// cypress/e2e/*.cy.ts spec this replaced — see cypress/e2e/README.md.
|
|
// Step definitions are picked up from the preprocessor's default globs:
|
|
// co-located `cypress/e2e/<feature-name>/*.ts` for scenario-specific
|
|
// steps, `cypress/support/step_definitions/*.ts` for steps shared across
|
|
// features (auth, navigation, generic API mocking).
|
|
specPattern: "cypress/e2e/**/*.feature",
|
|
async setupNodeEvents(on, config) {
|
|
// Disable GPU for headless/sandboxed environments (e.g. CI containers)
|
|
// where no GPU device is available.
|
|
on("before:browser:launch", (browser, launchOptions) => {
|
|
if (browser.family === "chromium") {
|
|
launchOptions.args.push("--disable-gpu", "--no-sandbox");
|
|
}
|
|
return launchOptions;
|
|
});
|
|
|
|
await addCucumberPreprocessorPlugin(on, config);
|
|
on(
|
|
"file:preprocessor",
|
|
createBundler({
|
|
plugins: [createEsbuildPlugin(config)],
|
|
}),
|
|
);
|
|
|
|
return config;
|
|
},
|
|
},
|
|
});
|