-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplaywright.config.ts
More file actions
85 lines (80 loc) · 2.98 KB
/
playwright.config.ts
File metadata and controls
85 lines (80 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { defineConfig, devices } from '@playwright/test'
import { existsSync } from 'node:fs'
const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? 'http://127.0.0.1:3000'
/** URL exacte pour la sonde de démarrage (évite blocage si baseURL sans slash final). */
const webServerUrl = new URL('/', baseURL).href
/** Désactive le webServer intégré (tu lances déjà `yarn dev` à part). */
const skipWebServer = !!process.env.PLAYWRIGHT_SKIP_WEB_SERVER
/** Chromium système (Alpine : paquet `chromium`). Ne pas fusionner `devices['Desktop Chrome']` ici : depuis Playwright ~1.49 cela pousse `chromium_headless_shell` (cache ms-playwright). */
const systemChromium =
process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH?.trim() ||
(existsSync('/usr/bin/chromium') ? '/usr/bin/chromium' : '')
/**
* Le serveur Nuxt doit répondre en HTTP sur baseURL : désactive HTTPS pour l’e2e
* (sinon Playwright attend du HTTP alors que Nuxt écoute en HTTPS → attente infinie).
*/
const webServerEnv = {
CI: 'true',
/** Lu par `nuxt.config` : pas de HMR pendant le serveur lancé par Playwright (évite reload + ECONNRESET). */
E2E_TEST: '1',
/** Vue menu avec « Changer mon mot de passe » / « J'ai oublié… » (`LoginMenu.vue`, `action === 'menu'`). */
ACTION: 'menu',
BROWSERSLIST_IGNORE_OLD_DATA: '1',
SESAME_HTTPS_ENABLED: 'false',
SESAME_HTTPS_PATH_KEY: '',
SESAME_HTTPS_PATH_CERT: '',
} as const
export default defineConfig({
testDir: 'tests/e2e',
/** Un seul worker + pas de parallélisme de fichiers : un seul client sur le `yarn dev` partagé (évite EPIPE / races). */
fullyParallel: false,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 1 : 0,
workers: 1,
reporter: process.env.CI ? 'github' : 'list',
timeout: 60_000,
expect: { timeout: 15_000 },
use: {
baseURL,
trace: 'on-first-retry',
ignoreHTTPSErrors: true,
launchOptions: {
args: ['--disable-dev-shm-usage', '--no-sandbox'],
},
},
projects: [
{
/** Nom évite toute convention interne liée au projet « chromium ». */
name: 'e2e',
use: systemChromium
? {
browserName: 'chromium' as const,
viewport: { width: 1280, height: 720 },
launchOptions: {
executablePath: systemChromium,
args: ['--disable-dev-shm-usage', '--no-sandbox'],
},
}
: { ...devices['Desktop Chrome'] },
},
],
...(skipWebServer
? {}
: {
webServer: {
command: 'yarn dev',
url: webServerUrl,
reuseExistingServer: !process.env.CI,
timeout: 300_000,
/** Réduit les EPIPE côté transport Playwright ↔ sous-processus (plus de pipe stdout/stderr). */
stdout: 'ignore',
stderr: 'ignore',
env: {
...Object.fromEntries(
Object.entries(process.env).filter((e): e is [string, string] => e[1] !== undefined),
),
...webServerEnv,
},
},
}),
})