背景
前端测试严重欠债:源文件 26790 个 vs 测试文件 347 个(ratio ≈ 0.01),而 Go 侧是 0.59-0.66。最大的风险面 app/shared(112K LOC)覆盖最薄,尤其 workbench 的 stores/hooks/utils 大多裸奔(如 workbenchTranscriptChromeActionMappers、UnifiedComposer 仅有部分覆盖)。
方案
不追求与 Go 等比例,优先补纯逻辑、高复用、易回归的层:
- workbench store(状态机/reducer)——纯函数,最易测、收益最高
- workbench/transcript 的 util 与 action mapper
- shared/hub 的数据转换 hook
每个目标模块:先列现有覆盖缺口(vitest --coverage),再补到关键分支覆盖。
依赖 / 阻塞
- 无阻塞,可与 Lane B 并行。
- 建议以
vitest --coverage 的 workbench 子目录覆盖率为 ratchet 基线,只升不降。
风险
- 低:新增测试,不改产品代码。注意不要为凑比例写无断言价值的测试。
验收
背景
前端测试严重欠债:源文件 26790 个 vs 测试文件 347 个(ratio ≈ 0.01),而 Go 侧是 0.59-0.66。最大的风险面
app/shared(112K LOC)覆盖最薄,尤其 workbench 的 stores/hooks/utils 大多裸奔(如workbenchTranscriptChromeActionMappers、UnifiedComposer仅有部分覆盖)。方案
不追求与 Go 等比例,优先补纯逻辑、高复用、易回归的层:
每个目标模块:先列现有覆盖缺口(vitest --coverage),再补到关键分支覆盖。
依赖 / 阻塞
vitest --coverage的 workbench 子目录覆盖率为 ratchet 基线,只升不降。风险
验收
pnpm -C app/shared test全绿,无 flaky