diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index f5541a7..6686bd4 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -46,6 +46,12 @@ jobs: - name: Build application run: npm run build + - name: Install Playwright browsers + run: npm run e2e:install + + - name: Run E2E tests + run: npm run test:e2e + - name: Test Docker build (artefacts) run: | docker build -t ihm-client:dist . diff --git a/docs/TESTING.md b/docs/TESTING.md index b625128..cee142c 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -13,17 +13,20 @@ Cette page décrit la stratégie de test, l’outillage et les conventions. Aucu - Test runner: Jest 29 (environnement `jsdom`). - TypeScript: `ts-jest` (transform TS). - Setup global: `tests/setup.ts` (polyfills Web, mocks réseau et stockage). +- E2E: Playwright (Chromium headless) avec `playwright.config.ts`. ## Organisation - `tests/unit/` : tests unitaires ciblés, rapides. - `tests/integration/` : réservé aux interactions WASM/services (à compléter si besoin). +- `tests/e2e/` : tests de bout en bout (smoke tests). ## Exécution - Lancer tous les tests: `npm run test` - Couverture: `npm run test:coverage` - Veille interactive: `npm run test:watch` +- E2E: `npm run e2e:install` puis `npm run test:e2e` ## Conventions diff --git a/package.json b/package.json index fdc169a..1f7dd4e 100755 --- a/package.json +++ b/package.json @@ -17,7 +17,9 @@ "prettify": "prettier --config ./.prettierrc --write \"src/**/*{.ts,.html,.css,.js}\"", "build:dist": "tsc -p tsconfig.build.json", "lint": "prettier -c \"src/**/*{.ts,.html,.css,.js}\"", - "type-check": "tsc -p tsconfig.json --noEmit" + "type-check": "tsc -p tsconfig.json --noEmit", + "e2e:install": "npx playwright install --with-deps", + "test:e2e": "playwright test" }, "keywords": [], "author": "", @@ -40,7 +42,8 @@ "vite-plugin-static-copy": "^1.0.6", "webpack": "^5.90.3", "webpack-cli": "^5.1.4", - "webpack-dev-server": "^5.0.2" + "webpack-dev-server": "^5.0.2", + "@playwright/test": "^1.46.0" }, "dependencies": { "@angular/elements": "^19.0.1", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..98e07ab --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './tests/e2e', + timeout: 30000, + use: { + baseURL: 'http://localhost:3000', + headless: true, + }, + projects: [ + { name: 'chromium', use: { ...devices['Desktop Chrome'] } }, + ], +}); diff --git a/tests/e2e/smoke.spec.ts b/tests/e2e/smoke.spec.ts new file mode 100644 index 0000000..d5f8060 --- /dev/null +++ b/tests/e2e/smoke.spec.ts @@ -0,0 +1,6 @@ +import { test, expect } from '@playwright/test'; + +test('charge la page d’accueil', async ({ page }) => { + await page.goto('/'); + await expect(page.locator('#containerId')).toBeVisible(); +});