Files
novalon-website/docs/test-coverage-improvement-plan.md
张翔 f5dec95a83 feat: 添加管理后台页面和功能,优化测试和性能配置
refactor: 重构页面导航和滚动逻辑,提升用户体验

test: 更新测试配置和用例,增加覆盖率和稳定性

perf: 优化性能指标和阈值,适应开发环境需求

ci: 添加Lighthouse CI工作流,集成性能测试

docs: 更新API文档和健康检查端点

fix: 修复登录页面和表单提交问题

style: 调整响应式布局和可访问性改进

chore: 更新依赖项和脚本配置
2026-03-24 10:11:30 +08:00

214 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 单元测试覆盖率改进计划
## 当前状态
**测试日期**: 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
- 根据风险和重要性分配测试资源