f5dec95a83
refactor: 重构页面导航和滚动逻辑,提升用户体验 test: 更新测试配置和用例,增加覆盖率和稳定性 perf: 优化性能指标和阈值,适应开发环境需求 ci: 添加Lighthouse CI工作流,集成性能测试 docs: 更新API文档和健康检查端点 fix: 修复登录页面和表单提交问题 style: 调整响应式布局和可访问性改进 chore: 更新依赖项和脚本配置
214 lines
4.8 KiB
Markdown
214 lines
4.8 KiB
Markdown
# 单元测试覆盖率改进计划
|
||
|
||
## 当前状态
|
||
|
||
**测试日期**: 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)
|
||
- 根据风险和重要性分配测试资源
|