Status: done
作为测试开发者,
我想要在 web 目录安装 @d8d/e2e-test-utils 包,
以便在 E2E 测试中使用 Select 工具。
@d8d/e2e-test-utils 包已构建web/package.json 中添加 workspace 依赖web/tests/e2e/ 中导入 Select 工具pnpm add -D @d8d/e2e-test-utils@workspace:* 安装import { selectRadixOption } from '@d8d/e2e-test-utils'pnpm typecheck 确认类型检查通过Epic 2 目标: 在 web/tests/e2e/ 的现有残疾人管理测试中使用 Select 工具,验证工具在真实场景中的可用性和稳定性。
Epic 2 范围:
web/tests/e2e/ 测试基础设施前置依赖:
@d8d/e2e-test-utils 包已构建)后续故事:
使用 pnpm workspace 协议安装:
cd web
pnpm add -D @d8d/e2e-test-utils@workspace:*
验证导入正常:
// web/tests/e2e/pages/admin/disability-person.page.ts
import { selectRadixOption, selectRadixOptionAsync } from '@d8d/e2e-test-utils';
TypeScript 类型检查:
pnpm typecheck 确认无类型错误@d8d/e2e-test-utils peer dependencies:
{
"peerDependencies": {
"@playwright/test": "^1.40.0"
}
}
web 当前 Playwright 版本:
{
"devDependencies": {
"@playwright/test": "1.55.0"
}
}
✅ 版本兼容确认: 1.55.0 满足 ^1.40.0 要求
现有 E2E 测试文件:
web/tests/e2e/
├── specs/
│ └── admin/
│ └── disability-person-complete.spec.ts
├── pages/
│ └── admin/
│ └── disability-person.page.ts
└── playwright.config.ts
将在下一个故事(2.2)中修改的文件:
web/tests/e2e/pages/admin/disability-person.page.tsClaude Opus 4.5 (claude-opus-4-5-20251101)
实现完成时间: 2026-01-09
完成内容:
@d8d/e2e-test-utils@workspace:* 到 web 目录web/tests/e2e/pages/admin/disability-person.page.ts 中添加注释说明工具包已安装代码审查修复 (2026-01-09):
验证结果:
pnpm --filter web typecheck 确认无 e2e-test-utils 相关错误)web/package.json - 添加 devDependency @d8d/e2e-test-utilspnpm-lock.yaml - 安装依赖后自动更新web/tests/e2e/pages/admin/disability-person.page.ts - 添加注释说明工具包已安装(将在后续 story 使用)2026-01-09 - Story 2.1 实现:
重要提示: 本部分包含开发者实现此故事所需的所有关键上下文和约束条件。
在 web 目录执行以下命令安装工具包:
cd web
pnpm add -D @d8d/e2e-test-utils@workspace:*
安装后,web/package.json 的 devDependencies 应包含:
{
"devDependencies": {
"@d8d/e2e-test-utils": "workspace:*",
"@playwright/test": "1.55.0"
}
}
在 E2E 测试文件中,应该能够成功导入工具函数:
// web/tests/e2e/pages/admin/disability-person.page.ts
import { selectRadixOption, selectRadixOptionAsync } from '@d8d/e2e-test-utils';
运行类型检查确保无错误:
pnpm typecheck
workspace:* 协议引用内部包packages/e2e-test-utils@d8d/e2e-test-utils 声明 @playwright/test 为 peer dependency:
{
"peerDependencies": {
"@playwright/test": "^1.40.0"
}
}
含义:
@playwright/test@1.55.0,满足要求| 包 | 版本 | 状态 |
|---|---|---|
| @playwright/test (web) | 1.55.0 | ✅ 满足 ^1.40.0 |
| @playwright/test (工具包要求) | ^1.40.0 | - |
确保 web/tsconfig.json 支持导入工具包类型:
{
"compilerOptions": {
"strict": true,
"moduleResolution": "bundler",
"esModuleInterop": true
}
}
packages/e2e-test-utils/src/index.ts 导出以下内容:
// Select 工具
export { selectRadixOption } from './radix-select.js';
export { selectRadixOptionAsync } from './radix-select.js';
// 类型
export type { BaseOptions } from './types.js';
export type { AsyncSelectOptions } from './radix-select.js';
// 错误
export { E2ETestError } from './errors.js';
export type { ErrorContext } from './errors.js';
| 函数名 | 用途 | 参数 |
|---|---|---|
selectRadixOption |
静态 Select 选择 | (page, label, value) |
selectRadixOptionAsync |
异步 Select 选择 | (page, label, value, options?) |
安装后立即验证:
cd web
pnpm list @d8d/e2e-test-utils
TypeScript 类型检查:
pnpm typecheck
导入测试(临时添加到测试文件):
// 在文件顶部添加
import { selectRadixOption, selectRadixOptionAsync } from '@d8d/e2e-test-utils';
// 保存后确认 IDE 无错误提示
本故事仅安装和验证导入,不需要:
这些将在 Story 2.2 和 2.3 中完成。
代码审查发现的问题类型:
TypeScript + Playwright 陷阱:
page.evaluate() 获取文本:text-is() 而非 :has-text() 进行精确匹配测试覆盖率目标:
选择器策略优先级:
data-testid - 最高优先级aria-label + role - 无障碍标准错误处理模式:
E2ETestError 而非原生 Error完整项目上下文: _bmad-output/project-context.md
关键规范:
pnpm test:e2e:chromium相关文档:
_bmad-output/planning-artifacts/architecture.md_bmad-output/implementation-artifacts/epic-1-retrospective.md_bmad-output/planning-artifacts/epics.md完成本故事后,继续: