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

4.8 KiB
Raw Permalink Blame History

单元测试覆盖率改进计划

当前状态

测试日期: 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%

当前阈值设置

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: 数据库集成测试

覆盖率报告

# 生成覆盖率报告
npm run test:coverage

# 查看HTML报告
open coverage/lcov-report/index.html

CI集成

# 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
    • 根据风险和重要性分配测试资源