Files
no-whatever/TEST_SUPPLEMENT_PLAN_2026-03-03.md
T

86 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试补充执行文档(2026-03-03
## 目标
- 为近期重构与修复引入的关键路径补齐高价值测试。
- 降低“请求契约回退”“状态错乱”“错误处理分散”三类回归风险。
- 每完成一个测试包:更新本文件状态并创建独立 git commit。
## 执行清单
### T1 `requestJson` 统一请求层单测(`src/lib/fetcher.ts`)【已完成】
- 新增测试文件:`src/lib/fetcher.test.ts`
- 用例清单:
1. 200 JSON 响应:返回解析后的对象。
2. 带 body 请求:自动注入 `Content-Type: application/json` 且正确序列化。
3. 调用方自定义 `Content-Type` 时不被覆盖。
4. 204 响应:返回 `undefined`
5. 非 2xx 且 payload 含 `{ error }`:抛出 `ApiRequestError`message/status/payload 正确。
6. 非 2xx 且纯文本响应:错误消息回退为文本内容。
7. 响应对象无 `text()` 仅有 `json()` 时仍可解析(兼容测试 mock)。
- 通过标准:
1. `npx vitest run src/lib/fetcher.test.ts` 通过。
2. `npx tsc --noEmit` 通过。
- 完成记录:
1. 已新增 `src/lib/fetcher.test.ts`,覆盖 7 个用例,执行通过(2026-03-03)。
### T2 `useBlindboxDraw` 状态机补测(`src/hooks/useBlindboxDraw.ts`)【已完成】
- 新增测试文件:`src/hooks/useBlindboxDraw.test.ts`
- 用例清单:
1. `poolCount=0`:直接报错,不触发请求。
2. 抽取成功:调用 `requestJson`(仅提交 `roomId`),并正确更新 `phase/poolCount/drawnHistory/revealedIdea`
3. 抽取失败:回退到 `pool`,写入错误信息。
- 通过标准:
1. `npx vitest run src/hooks/useBlindboxDraw.test.ts` 通过。
2. `npx tsc --noEmit` 通过。
- 完成记录:
1. 已新增 `src/hooks/useBlindboxDraw.test.ts`,覆盖空池/成功/失败 3 条关键分支(2026-03-03)。
### T3 `useBlindboxRoom` 关键交互补测(`src/hooks/useBlindboxRoom.ts`)【已完成】
- 新增测试文件:`src/hooks/useBlindboxRoom.test.ts`
- 用例清单:
1. 初始化拉取房间成功后,成员判断正确(`isMember=true`)。
2. `handleJoinRoom` 仅提交 `code` 参数,成功后刷新成员状态。
3. `handleLeaveOrDelete` 二次确认流程正确,删除请求不再携带冗余 body。
- 通过标准:
1. `npx vitest run src/hooks/useBlindboxRoom.test.ts` 通过。
2. `npx tsc --noEmit` 通过。
- 完成记录:
1. 已新增 `src/hooks/useBlindboxRoom.test.ts`,覆盖初始化成员识别、仅 code 入参加入、二次确认删除(2026-03-03)。
### T4 `useBlindboxPlan` 核心分支补测(`src/hooks/useBlindboxPlan.ts`)【已完成】
- 新增测试文件:`src/hooks/useBlindboxPlan.test.ts`
- 用例清单:
1. `fetchAcceptedPlan` 正常读取已接受计划并写入 `activeContract`
2. `handleGeneratePlan` 在流式失败时走 fallback API,成功进入 `plan_reveal`
3. `handleAcceptPlan` 成功:设置 `planAccepted`、更新 `activeContract`、触发提示。
4. `handleAcceptPlan` 失败:不应误标记已接受,返回错误提示。
- 通过标准:
1. `npx vitest run src/hooks/useBlindboxPlan.test.ts` 通过。
2. `npx tsc --noEmit` 通过。
- 完成记录:
1. 已新增 `src/hooks/useBlindboxPlan.test.ts`,覆盖 latest、流式失败 fallback、accept 成功/失败四个关键分支(2026-03-03)。
### T5 E2E 关键流程补测(Playwright)【已完成】
- 新增配置与测试:
1. `playwright.config.ts`
2. `e2e/home-navigation.spec.ts`
3. `e2e/panic-join.spec.ts`
4. `e2e/invite-join.spec.ts`
- 用例清单:
1. 首页模式卡片导航:`/` -> `/panic` -> 返回 -> `/blindbox`
2. Panic 手动加入:房间号输入规范化(大写、过滤非法字符、截断 6 位)并成功跳转房间。
3. 邀请页加入:展示房间人数,点击加入后成功跳转房间。
- 通过标准:
1. `npm run test:e2e` 通过。
- 完成记录:
1. 已补齐 Playwright 配置与 3 条 E2E 用例(2026-03-03)。
2. Jenkins 已接入 E2E 门禁(`test:e2e:install` + `test:e2e`)(2026-03-03)。
3. 当前本地环境无法访问 `registry.npmjs.org`,无法在线安装 Playwright 依赖,`test:e2e` 待在可联网环境执行。
## 状态追踪
- T1:已完成(2026-03-03
- T2:已完成(2026-03-03
- T3:已完成(2026-03-03
- T4:已完成(2026-03-03
- T5:已完成(代码已补齐,2026-03-03)