覆盖率棘轮
覆盖率阈值是防止回退的下限,而不是质量目标。只有在实测结果留出了足以容纳 V8 覆盖率正常波动的余量,并且新增测试验证的是有意义的行为而非实现细节时,才提高阈值。
阈值定义在 vitest.coverage.config.ts 中。重新生成快照:
bash
pnpm test:coverage当前快照
2026-09-29 使用 pnpm test:coverage 测得。
| 范围 | Statements | Branches | Functions | Lines |
|---|---|---|---|---|
| 全部文件 | 87.26 | 78.57 | 90.99 | 91.27 |
| Browser 包 | 84.51 | 73.87 | 87.14 | 89.28 |
| Browser HTTP transport | 96.90 | 93.83 | 95.45 | 99.55 |
| Core 包 | 87.42 | 80.10 | 90.34 | 90.68 |
| OTLP 包 | 95.79 | 85.06 | 100.00 | 98.68 |
| Pretty 包 | 90.64 | 84.91 | 90.00 | 94.02 |
薄弱环节
| 范围 | 实测差距 | 下一步 |
|---|---|---|
| OTLP 包 | 包级覆盖率满足 transport 失败路径契约,但 log-bridge.ts(分支 74%)和 trace.ts(分支 78%)仍有未测试的回退分支。 | 保持包级下限,在这些分支变动时补充针对性测试。 |
| Pretty 包 | 包级覆盖率接近仓库平均水平。console-transport.ts 的分支覆盖率(67%)是包内最低的文件。 | 包级下限贴近实测值;在覆盖 console 自动样式分支之前,不提高文件级下限。 |
| Browser 包 | indexeddb-transport.ts(分支 64%)拉低了包的平均值。 | 包级下限保持保守,保留 http-transport.ts 的文件级下限,逐步提高 IndexedDB 边界情况的覆盖率。 |
棘轮规则
- 全局阈值至少比实测总值低两个百分点,除非有意收窄差距并在本页记录原因。
- 对已经有成熟覆盖率的高风险文件,优先设置文件级阈值,例如浏览器 HTTP 投递和 OTLP JSON 映射。
- 不要因为其他文件拉高了平均值,就提高仍有高风险分支未覆盖的包的阈值。
- 仅为覆盖率而写的测试也必须断言外部可观察的行为:错误、重试、过滤、导入边界、导出的文件名、生命周期清理或捕获的 payload 结构。
- 降低阈值必须在同一次变更中经过明确的质量评审。
当前下限
| 范围 | 下限(statements / branches / functions / lines) | 说明 |
|---|---|---|
| 全局 | 86 / 76 / 90 / 90 | 下一次提高分支阈值应来自 browser 或 Node 的边界测试,而不是靠 Pretty 拉高。 |
| OTLP | 94 / 80 / 100 / 98 | 在补充 transport 失败路径测试后设定。 |
| Pretty | 88 / 82 / 88 / 92 | 在补充 formatter、console 回退和 stream 生命周期测试后设定。 |
| Browser | 84 / 73 / 86 / 89 | http-transport.ts 另有文件级下限 95 / 91 / 92 / 99。 |
