From 3cd4c26d3cad915044d3d5dae9fc249cf91efc75 Mon Sep 17 00:00:00 2001 From: kurihada Date: Tue, 3 Mar 2026 13:26:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B5=8B=E8=AF=95=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E6=89=A7=E8=A1=8C=E6=96=87=E6=A1=A3=E5=B9=B6=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=A1=A5=E6=B5=8B=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEST_SUPPLEMENT_PLAN_2026-03-03.md | 60 ++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 TEST_SUPPLEMENT_PLAN_2026-03-03.md diff --git a/TEST_SUPPLEMENT_PLAN_2026-03-03.md b/TEST_SUPPLEMENT_PLAN_2026-03-03.md new file mode 100644 index 0000000..105b51a --- /dev/null +++ b/TEST_SUPPLEMENT_PLAN_2026-03-03.md @@ -0,0 +1,60 @@ +# 测试补充执行文档(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` 通过。 + +### 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` 通过。 + +### 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` 通过。 + +### 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` 通过。 + +## 状态追踪 +- T1:未开始 +- T2:未开始 +- T3:未开始 +- T4:未开始 +