|
@@ -1,6 +1,6 @@
|
|
|
# Story 1.2: 实现类型定义和错误处理
|
|
# Story 1.2: 实现类型定义和错误处理
|
|
|
|
|
|
|
|
-Status: ready-for-dev
|
|
|
|
|
|
|
+Status: done
|
|
|
|
|
|
|
|
<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
|
|
|
|
|
@@ -23,31 +23,31 @@ Status: ready-for-dev
|
|
|
|
|
|
|
|
## Tasks / Subtasks
|
|
## Tasks / Subtasks
|
|
|
|
|
|
|
|
-- [ ] 实现 `src/types.ts` - 共享和特定类型定义 (AC: 1, 2, 4, 5)
|
|
|
|
|
- - [ ] 导入并重新导出 Playwright `Page` 类型
|
|
|
|
|
- - [ ] 定义 `BaseOptions` 接口(timeout 等通用配置)
|
|
|
|
|
- - [ ] 定义 `ErrorContext` 接口(operation, target, expected, actual, available, suggestion)
|
|
|
|
|
- - [ ] 定义 `AsyncSelectOptions` 接口(extends BaseOptions)
|
|
|
|
|
- - [ ] 定义 `FileUploadOptions` 接口(extends BaseOptions)
|
|
|
|
|
- - [ ] 定义 `FormStepOptions` 接口(extends BaseOptions)
|
|
|
|
|
- - [ ] 定义 `DialogOptions` 接口(extends BaseOptions)
|
|
|
|
|
- - [ ] 为所有导出类型添加完整 JSDoc 注释
|
|
|
|
|
-- [ ] 实现 `src/errors.ts` - 错误类和错误处理 (AC: 2, 5)
|
|
|
|
|
- - [ ] 实现 `E2ETestError` 类(extends Error)
|
|
|
|
|
- - [ ] 实现 `formatErrorMessage` 私有函数(生成友好错误消息)
|
|
|
|
|
- - [ ] 实现 `throwError` 辅助函数(抛出结构化错误)
|
|
|
|
|
- - [ ] 为 `E2ETestError` 添加完整 JSDoc 注释
|
|
|
|
|
-- [ ] 实现 `src/constants.ts` - 超时和选择器策略常量 (AC: 3)
|
|
|
|
|
- - [ ] 定义 `DEFAULT_TIMEOUTS` 常量(static: 2000, async: 5000, networkIdle: 10000)
|
|
|
|
|
- - [ ] 定义 `SELECTOR_STRATEGIES` 常量(testid → ARIA → text)
|
|
|
|
|
- - [ ] 为所有常量添加 JSDoc 注释
|
|
|
|
|
-- [ ] 更新 `src/index.ts` 导出新增类型和错误类 (AC: 1, 2, 3)
|
|
|
|
|
- - [ ] 导出 `types.ts` 中的所有类型
|
|
|
|
|
- - [ ] 导出 `errors.ts` 中的 `E2ETestError`
|
|
|
|
|
- - [ ] 导出 `constants.ts` 中的所有常量
|
|
|
|
|
-- [ ] 验证类型检查通过 (AC: 6)
|
|
|
|
|
- - [ ] 运行 `pnpm typecheck` 确保无类型错误
|
|
|
|
|
- - [ ] 验证所有类型都有正确的 JSDoc 注释
|
|
|
|
|
|
|
+- [x] 实现 `src/types.ts` - 共享和特定类型定义 (AC: 1, 2, 4, 5)
|
|
|
|
|
+ - [x] 导入并重新导出 Playwright `Page` 类型
|
|
|
|
|
+ - [x] 定义 `BaseOptions` 接口(timeout 等通用配置)
|
|
|
|
|
+ - [x] 定义 `ErrorContext` 接口(operation, target, expected, actual, available, suggestion)
|
|
|
|
|
+ - [x] 定义 `AsyncSelectOptions` 接口(extends BaseOptions)
|
|
|
|
|
+ - [x] 定义 `FileUploadOptions` 接口(extends BaseOptions)
|
|
|
|
|
+ - [x] 定义 `FormStepOptions` 接口(extends BaseOptions)
|
|
|
|
|
+ - [x] 定义 `DialogOptions` 接口(extends BaseOptions)
|
|
|
|
|
+ - [x] 为所有导出类型添加完整 JSDoc 注释
|
|
|
|
|
+- [x] 实现 `src/errors.ts` - 错误类和错误处理 (AC: 2, 5)
|
|
|
|
|
+ - [x] 实现 `E2ETestError` 类(extends Error)
|
|
|
|
|
+ - [x] 实现 `formatErrorMessage` 私有函数(生成友好错误消息)
|
|
|
|
|
+ - [x] 实现 `throwError` 辅助函数(抛出结构化错误)
|
|
|
|
|
+ - [x] 为 `E2ETestError` 添加完整 JSDoc 注释
|
|
|
|
|
+- [x] 实现 `src/constants.ts` - 超时和选择器策略常量 (AC: 3)
|
|
|
|
|
+ - [x] 定义 `DEFAULT_TIMEOUTS` 常量(static: 2000, async: 5000, networkIdle: 10000)
|
|
|
|
|
+ - [x] 定义 `SELECTOR_STRATEGIES` 常量(testid → ARIA → text)
|
|
|
|
|
+ - [x] 为所有常量添加 JSDoc 注释
|
|
|
|
|
+- [x] 更新 `src/index.ts` 导出新增类型和错误类 (AC: 1, 2, 3)
|
|
|
|
|
+ - [x] 导出 `types.ts` 中的所有类型
|
|
|
|
|
+ - [x] 导出 `errors.ts` 中的 `E2ETestError`
|
|
|
|
|
+ - [x] 导出 `constants.ts` 中的所有常量
|
|
|
|
|
+- [x] 验证类型检查通过 (AC: 6)
|
|
|
|
|
+ - [x] 运行 `pnpm typecheck` 确保无类型错误
|
|
|
|
|
+ - [x] 验证所有类型都有正确的 JSDoc 注释
|
|
|
|
|
|
|
|
## Dev Notes
|
|
## Dev Notes
|
|
|
|
|
|
|
@@ -447,16 +447,41 @@ Claude (d8d-model) via create-story workflow
|
|
|
- 为后续工具函数提供类型基础设施
|
|
- 为后续工具函数提供类型基础设施
|
|
|
- 包含架构约束、项目标准对齐、前一个故事集成上下文
|
|
- 包含架构约束、项目标准对齐、前一个故事集成上下文
|
|
|
|
|
|
|
|
|
|
+**实现完成 (2026-01-08):**
|
|
|
|
|
+- ✅ 完成 `src/types.ts`: 实现了 `BaseOptions`, `ErrorContext`, `AsyncSelectOptions`, `FileUploadOptions`, `FormStepOptions`, `DialogOptions` 类型
|
|
|
|
|
+- ✅ 完成 `src/errors.ts`: 实现了 `E2ETestError` 类和 `throwError` 辅助函数
|
|
|
|
|
+- ✅ 完成 `src/constants.ts`: 实现了 `DEFAULT_TIMEOUTS`, `SELECTOR_STRATEGIES` 和 `SelectorStrategy` 类型
|
|
|
|
|
+- ✅ 所有导出类型都有完整的 JSDoc 注释和示例代码
|
|
|
|
|
+- ✅ 类型检查通过 (`pnpm typecheck`)
|
|
|
|
|
+- ✅ 遵循 TypeScript 严格模式,无 `any` 类型
|
|
|
|
|
+
|
|
|
### File List
|
|
### File List
|
|
|
|
|
|
|
|
-**本故事将创建/修改的文件:**
|
|
|
|
|
|
|
+**本故事创建/修改的文件:**
|
|
|
- `packages/e2e-test-utils/src/types.ts` - 完整实现共享和特定类型定义
|
|
- `packages/e2e-test-utils/src/types.ts` - 完整实现共享和特定类型定义
|
|
|
- `packages/e2e-test-utils/src/errors.ts` - 完整实现错误类和错误处理
|
|
- `packages/e2e-test-utils/src/errors.ts` - 完整实现错误类和错误处理
|
|
|
- `packages/e2e-test-utils/src/constants.ts` - 完整实现超时和选择器策略常量
|
|
- `packages/e2e-test-utils/src/constants.ts` - 完整实现超时和选择器策略常量
|
|
|
-- `packages/e2e-test-utils/src/index.ts` - 更新主导出,导出新增类型和错误类
|
|
|
|
|
|
|
+- `packages/e2e-test-utils/package.json` - 修复 exports 配置(移除冗余 types 条件)
|
|
|
|
|
+
|
|
|
|
|
+**相关文件(已在 Story 1.1 中完成,本故事无需修改):**
|
|
|
|
|
+- `packages/e2e-test-utils/src/index.ts` - 主导出(已在 Story 1.1 正确配置)
|
|
|
|
|
+- `packages/e2e-test-utils/tests/unit/index.test.ts` - 单元测试(已在 Story 1.1 创建,测试本故事所有新功能)
|
|
|
|
|
|
|
|
-**相关文件(只读,用于参考):**
|
|
|
|
|
|
|
+**只读参考文件:**
|
|
|
- `_bmad-output/implementation-artifacts/1-1-create-package-structure.md` - 前一个故事
|
|
- `_bmad-output/implementation-artifacts/1-1-create-package-structure.md` - 前一个故事
|
|
|
- `_bmad-output/planning-artifacts/epics.md` - Epic 和故事定义
|
|
- `_bmad-output/planning-artifacts/epics.md` - Epic 和故事定义
|
|
|
- `_bmad-output/planning-artifacts/architecture.md` - 架构决策和模式
|
|
- `_bmad-output/planning-artifacts/architecture.md` - 架构决策和模式
|
|
|
- `_bmad-output/project-context.md` - 项目技术栈和规则
|
|
- `_bmad-output/project-context.md` - 项目技术栈和规则
|
|
|
|
|
+
|
|
|
|
|
+## Change Log
|
|
|
|
|
+
|
|
|
|
|
+### 2026-01-08 - Story 1.2 实现
|
|
|
|
|
+- ✅ 实现 `src/types.ts`: `BaseOptions`, `ErrorContext`, `AsyncSelectOptions`, `FileUploadOptions`, `FormStepOptions`, `DialogOptions`
|
|
|
|
|
+- ✅ 实现 `src/errors.ts`: `E2ETestError` 类, `throwError` 辅助函数
|
|
|
|
|
+- ✅ 实现 `src/constants.ts`: `DEFAULT_TIMEOUTS`, `SELECTOR_STRATEGIES`, `SelectorStrategy` 类型
|
|
|
|
|
+- ✅ 所有导出都有完整 JSDoc 注释和示例
|
|
|
|
|
+- ✅ 类型检查通过 (`pnpm typecheck`)
|
|
|
|
|
+
|
|
|
|
|
+### 2026-01-08 - 代码审查修复
|
|
|
|
|
+- 🔧 修复 `package.json`: 移除 exports 中冗余的 "types" 条件
|
|
|
|
|
+- 📝 更新 File List: 澄清 `src/index.ts` 和 `tests/unit/index.test.ts` 在 Story 1.1 中已完成
|