86 lines
4.3 KiB
Markdown
86 lines
4.3 KiB
Markdown
# 测试补充执行文档(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. 已安装 `@playwright/test` 与 Chromium 浏览器,并实测 `npm run test:e2e` 通过(3/3)(2026-03-03)。
|
||
|
||
## 状态追踪
|
||
- T1:已完成(2026-03-03)
|
||
- T2:已完成(2026-03-03)
|
||
- T3:已完成(2026-03-03)
|
||
- T4:已完成(2026-03-03)
|
||
- T5:已完成(代码已补齐,2026-03-03)
|