# 单元测试覆盖率改进计划 ## 当前状态 **测试日期**: 2026-03-20 ### 当前覆盖率 | 指标 | 当前值 | 目标值 | 差距 | |------|--------|--------|------| | **Lines** | 29.36% | 80% | -50.64% | | **Statements** | 29.5% | 80% | -50.5% | | **Functions** | 30.21% | 80% | -49.79% | | **Branches** | 22.66% | 80% | -57.34% | ### 当前阈值设置 ```javascript coverageThreshold: { global: { branches: 35, functions: 45, lines: 45, statements: 45, }, } ``` ## 改进策略 ### 阶段一:快速提升(当前 → 50%) **时间**: 2周 **目标**: 将覆盖率从当前水平提升到50% **重点区域**: 1. **核心业务逻辑** - [ ] `src/app/(marketing)/contact/actions.ts` (当前: 0%) - [ ] `src/app/api/admin/content/route.ts` (当前: 0%) - [ ] `src/app/api/admin/users/route.ts` (当前: 0%) 2. **工具函数** - [ ] `src/lib/sanitize.ts` - [ ] `src/lib/csrf.ts` - [ ] `src/lib/constants.ts` 3. **Hooks** - [ ] `src/hooks/use-media-query.ts` - [ ] `src/hooks/use-scroll-reveal.ts` - [ ] `src/hooks/use-intersection-observer.ts` **行动项**: - 为每个核心函数编写基础测试用例 - 覆盖主要成功路径和常见错误场景 - 使用Mock隔离外部依赖 ### 阶段二:稳步推进(50% → 65%) **时间**: 3周 **目标**: 将覆盖率从50%提升到65% **重点区域**: 1. **UI组件** - [ ] `src/components/ui/button.tsx` - [ ] `src/components/ui/input.tsx` - [ ] `src/components/ui/textarea.tsx` - [ ] `src/components/ui/toast.tsx` 2. **页面组件** - [ ] `src/app/(marketing)/about/page.tsx` - [ ] `src/app/(marketing)/products/page.tsx` - [ ] `src/app/(marketing)/services/page.tsx` **行动项**: - 使用React Testing Library测试组件交互 - 测试用户事件(点击、输入、提交) - 测试组件状态变化和副作用 ### 阶段三:精细打磨(65% → 80%) **时间**: 4周 **目标**: 将覆盖率从65%提升到80% **重点区域**: 1. **边界情况** - [ ] 错误处理逻辑 - [ ] 空值/undefined处理 - [ ] 异常输入验证 2. **复杂场景** - [ ] API集成测试 - [ ] 数据库交互测试 - [ ] 认证/授权流程 **行动项**: - 补充边界测试用例 - 测试错误处理和异常流程 - 使用MSW (Mock Service Worker)测试API调用 - 使用Testcontainers测试数据库交互 ## 执行计划 ### 每周任务分配 #### Week 1-2: 核心业务逻辑 - [ ] 联系表单Server Actions测试 - [ ] 内容管理API测试 - [ ] 用户管理API测试 - [ ] 工具函数测试 #### Week 3-4: UI组件基础 - [ ] 表单组件测试 - [ ] 按钮组件测试 - [ ] Toast组件测试 - [ ] 基础页面组件测试 #### Week 5-7: 页面组件 - [ ] 营销页面测试 - [ ] 产品页面测试 - [ ] 服务页面测试 - [ ] 案例页面测试 #### Week 8-9: 边界情况 - [ ] 错误处理测试 - [ ] 边界值测试 - [ ] 异常流程测试 ## 工具和资源 ### 测试工具 - **Jest**: 单元测试框架 - **React Testing Library**: React组件测试 - **MSW**: API Mock - **Testcontainers**: 数据库集成测试 ### 覆盖率报告 ```bash # 生成覆盖率报告 npm run test:coverage # 查看HTML报告 open coverage/lcov-report/index.html ``` ### CI集成 ```yaml # GitHub Actions示例 - name: Run tests with coverage run: npm run test:coverage:check - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: files: ./coverage/coverage-final.json ``` ## 验收标准 ### 阶段一完成标准 - [ ] 核心业务逻辑覆盖率 ≥ 70% - [ ] 工具函数覆盖率 ≥ 80% - [ ] Hooks覆盖率 ≥ 60% - [ ] 总体覆盖率 ≥ 50% ### 阶段二完成标准 - [ ] UI组件覆盖率 ≥ 60% - [ ] 页面组件覆盖率 ≥ 50% - [ ] 总体覆盖率 ≥ 65% ### 阶段三完成标准 - [ ] 所有模块覆盖率 ≥ 75% - [ ] 总体覆盖率 ≥ 80% - [ ] CI中强制执行覆盖率阈值 ## 持续改进 ### 定期审查 - 每周审查覆盖率报告 - 识别低覆盖率模块 - 优先测试高影响区域 ### 新代码要求 - 所有新代码必须包含单元测试 - 新代码覆盖率要求 ≥ 80% - PR必须通过覆盖率检查 ### 重构支持 - 重构前确保有足够的测试覆盖 - 重构后验证测试仍然通过 - 利用测试作为重构的安全网 ## 注意事项 1. **不要为了覆盖率而写测试** - 测试应该验证行为,而不是代码行 - 有意义的测试比高覆盖率更重要 2. **关注关键路径** - 优先测试核心业务逻辑 - 确保关键功能有充分的测试覆盖 3. **保持测试质量** - 测试代码也需要维护 - 定期清理和重构测试代码 - 避免脆弱的测试 4. **平衡投入产出** - 80%覆盖率是目标,不是硬性要求 - 某些代码可能不需要测试(如简单的getter/setter) - 根据风险和重要性分配测试资源