import { defineConfig, devices } from "@playwright/test"; // 浏览器用例跑构建产物(vite preview),不再用按需转译的 dev server: // dev server 每次整页加载要拉数百个模块,Chromium 会以 // ERR_INSUFFICIENT_RESOURCES 放弃加载,页面根本挂载不起来。 const PORT = Number(process.env.WEB_PORT ?? 4173); export default defineConfig({ testDir: "./tests/e2e", globalSetup: "./tests/e2e/global-setup.ts", // 双用户用例需要等 Worker 审核资料/瓶子(每个 1-2s)+ 两次登录, // 60s 不够,会在用例中途被拆除 context 而误报失败。 timeout: 150_000, expect: { timeout: 15_000 }, fullyParallel: false, workers: 1, retries: process.env.CI ? 2 : 0, reporter: [["list"]], use: { baseURL: `http://127.0.0.1:${PORT}`, trace: "retain-on-failure", screenshot: "only-on-failure", video: "off", }, // 由 Playwright 保证被测前端可用:先构建(关闭 Service Worker,避免缓存 // 干扰断言),再起 preview。服务中途消失会让整轮报 ERR_CONNECTION_REFUSED, // 交由 Playwright 管理可避免这类假失败。 webServer: { command: `DISABLE_PWA=1 corepack pnpm --filter @drift/web exec vite build && corepack pnpm --filter @drift/web exec vite preview --host 127.0.0.1 --port ${PORT} --strictPort`, url: `http://127.0.0.1:${PORT}`, reuseExistingServer: !process.env.CI, timeout: 240_000, }, projects: [ { name: "chromium", use: { ...devices["Desktop Chrome"], // 该机器内存较小,避免 /dev/shm 与多余缓存把渲染进程拖垮 launchOptions: { args: ["--disable-dev-shm-usage", "--disable-gpu"], }, }, }, ], });