54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
import { defineConfig, devices } from '@playwright/test'
|
||
|
||
const BASE_URL = process.env.E2E_BASE_URL || 'http://127.0.0.1:5090'
|
||
|
||
/**
|
||
* E2E(Playwright)。与 Vitest 的分工:
|
||
* vitest → `src/**\/*.{test,spec}.ts`,happy-dom 里的单元测试(见 vitest.config.ts)
|
||
* playwright → `e2e/**`,真实浏览器 + 真后端
|
||
*
|
||
* `testDir` 必须限定为 `./e2e`:Playwright 默认的 testMatch 会顺着包目录把
|
||
* `src/**\/*.spec.ts` 也收进来,那样 vitest 的用例会被塞进浏览器跑,报一堆莫名其妙的错。
|
||
*
|
||
* 前置条件:后端已在 8088 起来(见 CODEBUDDY.md)。前端 dev server 由下面的 webServer
|
||
* 负责,已经在跑就复用(不会重复占 5090)。
|
||
*/
|
||
export default defineConfig({
|
||
testDir: './e2e',
|
||
fullyParallel: true,
|
||
forbidOnly: Boolean(process.env.CI),
|
||
retries: process.env.CI ? 1 : 0,
|
||
reporter: process.env.CI ? [['list'], ['html', { open: 'never' }]] : [['list']],
|
||
// 整轮只在这里登录一次,原因见 e2e/support/session.ts 的「互踢」说明
|
||
globalSetup: './e2e/support/global-setup.ts',
|
||
// dev server 是按需转译的:某个页面**第一次**被访问时要现编整张依赖图,冷启动实测 5-11s。
|
||
// 用默认的 5s expect 超时会表现为「同一个用例时好时坏」,所以统一放宽。
|
||
// 后端慢(登录/菜单查询走远程 SQL Server)也吃这个时间。
|
||
timeout: 60_000,
|
||
expect: { timeout: 15_000 },
|
||
use: {
|
||
baseURL: BASE_URL,
|
||
actionTimeout: 15_000,
|
||
navigationTimeout: 30_000,
|
||
trace: 'retain-on-failure',
|
||
screenshot: 'only-on-failure',
|
||
},
|
||
projects: [
|
||
{
|
||
name: 'chromium',
|
||
use: {
|
||
...devices['Desktop Chrome'],
|
||
// 下载 Playwright 自带 Chromium 不便时(慢网 / 离线 / 公司代理),
|
||
// 用系统已装的浏览器:E2E_CHANNEL=msedge 或 E2E_CHANNEL=chrome
|
||
channel: process.env.E2E_CHANNEL || undefined,
|
||
},
|
||
},
|
||
],
|
||
webServer: {
|
||
command: 'pnpm dev',
|
||
url: BASE_URL,
|
||
reuseExistingServer: true,
|
||
timeout: 120_000,
|
||
},
|
||
})
|