# 测试补充执行文档（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）
