新增 plugin-mount job(pnpm test:mount): - scripts/e2e-mount.sh:scratch profile 引导(allowBuilds/minimumReleaseAgeExclude 预写)→ 官方 dsh plugin --profile web add file:<tarball> 挂载(dsh.profile.bundles 协调校验)→ keyless dsh web --port 0 → Playwright 无头渲染 → trap 清理 - tests/e2e/mount.e2e.ts:seed 工作区+会话(宿主 RPC)→ 断言 #root 与 [data-dsh-better-sidebar] 挂载、无崩溃标记(错误条/pageerror/插件 console 错误)→ + 菜单逐个打开内置 tab 深扫 - playwright.config.ts:chromium headless、单 worker、retries 0、失败留 trace/截图/HTML 报告 - vitest exclude 与 *.e2e.ts 命名双保险隔离;exclude 整体替换默认值,须保留默认排除项 - CI 钉住 @deepseek-ai/dsh@0.1.0-rc.6;DSH_TELEMETRY_DISABLED=1;workflow_dispatch + PR 并发取消 已验证:本地端到端全绿;人为注入 tab 组件 crash → 门禁变红(错误条检出),还原后变绿; typecheck/vitest 全绿;CI 同款 npm 安装 CLI 路径实测通过
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
/**
|
|
* Playwright config for the headless-render mount lane (tests/e2e).
|
|
*
|
|
* This lane does NOT spawn the server itself: `scripts/e2e-mount.sh` boots a
|
|
* real `dsh web` instance (with the npm-packed plugin mounted through the
|
|
* official `dsh plugin add` channel) and injects the base URL through
|
|
* `DSH_E2E_URL`. The spec's job is to render that URL in a headless Chromium
|
|
* and prove the plugin mounts without crashing the shell.
|
|
*
|
|
* Specs are named `*.e2e.ts` (not `*.spec.ts`) so vitest's default include
|
|
* never collects them; vitest.config.ts excludes the directory as well.
|
|
*/
|
|
import { defineConfig } from '@playwright/test'
|
|
|
|
export default defineConfig({
|
|
testDir: './tests/e2e',
|
|
// The lane's specs are named *.e2e.ts (so vitest's default include never
|
|
// collects them); tell Playwright to pick exactly that shape.
|
|
testMatch: '**/*.e2e.ts',
|
|
// A deterministic gate: no retries, one worker, one browser. The whole lane
|
|
// is a crash probe against one server instance, so serial execution keeps
|
|
// the assertions meaningful (a crash would trip the very next check).
|
|
retries: 0,
|
|
workers: 1,
|
|
fullyParallel: false,
|
|
timeout: 120_000,
|
|
reporter: [
|
|
['list'],
|
|
// Local debugging artifact; CI uploads the report dir on failure.
|
|
['html', { open: 'never' }],
|
|
],
|
|
use: {
|
|
browserName: 'chromium',
|
|
headless: true,
|
|
viewport: { width: 1440, height: 900 },
|
|
screenshot: 'only-on-failure',
|
|
trace: 'retain-on-failure',
|
|
},
|
|
})
|