afab4e7cba
- 新增 Playwright E2E(治理、登录、投瓶捞瓶回复与实时聊天、举报拉黑与断线恢复)共 9 条用例 - 每个用例前重置数据库、用例后关闭全部 browser context,消除跨用例污染与资源泄漏 - 前端改由 Playwright 托管构建与 preview(关闭 SW);Vite 代理注入 Origin 头以通过接口 Origin 校验 - 根级 vitest 排除 Playwright 用例与需专用配置的 web 用例,避免误收集导致的假失败 - 测试手机号按实测校验结果收敛白名单,避免用例传入会被后端拒绝的号段 验证结果: - Web E2E 9/9 连续两轮通过(含运行前后服务健康检查) - API E2E 146/146 连续两轮通过 - 单测:根级 14 文件/119 用例、web 包 8 文件/31 用例通过 - typecheck、lint、build、依赖审计(audit)均通过
47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
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"],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
});
|