docs(zh-CN): sync Chinese docs with latest upstream changes (#304)

* docs(zh-CN): sync Chinese docs with latest upstream changes

* update

---------

Co-authored-by: neo <neo.dowithless@gmail.com>
This commit is contained in:
zdoc.app
2026-03-03 14:28:27 +08:00
committed by GitHub
parent adc0f67008
commit ada4cd75a3
114 changed files with 11161 additions and 4790 deletions

View File

@@ -1,28 +1,69 @@
# 测试覆盖率
分析测试覆盖率并生成缺失的测试
分析测试覆盖率,识别缺口,并生成缺失的测试以达到 80%+ 的覆盖率。
1. 运行带有覆盖率的测试npm test --coverage 或 pnpm test --coverage
## 步骤 1检测测试框架
2. 分析覆盖率报告 (coverage/coverage-summary.json)
| 指标 | 覆盖率命令 |
|-----------|-----------------|
| `jest.config.*``package.json` jest | `npx jest --coverage --coverageReporters=json-summary` |
| `vitest.config.*` | `npx vitest run --coverage` |
| `pytest.ini` / `pyproject.toml` pytest | `pytest --cov=src --cov-report=json` |
| `Cargo.toml` | `cargo llvm-cov --json` |
| `pom.xml` 与 JaCoCo | `mvn test jacoco:report` |
| `go.mod` | `go test -coverprofile=coverage.out ./...` |
3. 识别覆盖率低于 80% 阈值的文件
## 步骤 2分析覆盖率报告
4. 对于每个覆盖率不足的文件:
* 分析未测试的代码路径
* 为函数生成单元测试
* 为 API 生成集成测试
* 为关键流程生成端到端测试
1. 运行覆盖率命令
2. 解析输出JSON 摘要或终端输出)
3. 列出**覆盖率低于 80%** 的文件,按最差情况排序
4. 对于每个覆盖率不足的文件,识别:
* 未测试的函数或方法
* 缺失的分支覆盖率if/else、switch、错误路径
* 增加分母的死代码
5. 验证新测试通过
## 步骤 3生成缺失的测试
6. 显示覆盖率指标的前后对比
对于每个覆盖率不足的文件,按以下优先级生成测试:
7. 确保项目整体覆盖率超过 80%
1. **快乐路径** — 使用有效输入的核心功能
2. **错误处理** — 无效输入、缺失数据、网络故障
3. **边界情况** — 空数组、null/undefined、边界值0、-1、MAX\_INT
4. **分支覆盖率** — 每个 if/else、switch case、三元运算符
重点关注:
### 测试生成规则
* 正常路径场景
* 错误处理
* 边界情况null、undefined、空值
* 边界条件
* 将测试放在源代码旁边:`foo.ts``foo.test.ts`(或遵循项目惯例)
* 使用项目中现有的测试模式(导入风格、断言库、模拟方法)
* 模拟外部依赖项数据库、API、文件系统
* 每个测试都应该是独立的 — 测试之间没有共享的可变状态
* 描述性地命名测试:`test_create_user_with_duplicate_email_returns_409`
## 步骤 4验证
1. 运行完整的测试套件 — 所有测试必须通过
2. 重新运行覆盖率 — 验证改进
3. 如果仍然低于 80%,针对剩余的缺口重复步骤 3
## 步骤 5报告
显示前后对比:
```
Coverage Report
──────────────────────────────
File Before After
src/services/auth.ts 45% 88%
src/utils/validation.ts 32% 82%
──────────────────────────────
Overall: 67% 84% ✅
```
## 重点关注领域
* 具有复杂分支的函数(高圈复杂度)
* 错误处理程序和 catch 块
* 整个代码库中使用的工具函数
* API 端点处理程序(请求 → 响应流程)
* 边界情况null、undefined、空字符串、空数组、零、负数