测试驱动开发工作流
此技能确保所有代码开发遵循TDD原则,并具备全面的测试覆盖率。
何时激活
- 编写新功能或功能
- 修复错误或问题
- 重构现有代码
- 添加API端点
- 创建新组件
核心原则
1. 测试优先于代码
始终先编写测试,然后实现代码以使测试通过。
2. 覆盖率要求
- 最低80%覆盖率(单元 + 集成 + 端到端)
- 覆盖所有边缘情况
- 测试错误场景
- 验证边界条件
3. 测试类型
单元测试
- 单个函数和工具
- 组件逻辑
- 纯函数
- 辅助函数和工具
集成测试
- API端点
- 数据库操作
- 服务交互
- 外部API调用
端到端测试 (Playwright)
- 关键用户流程
- 完整工作流
- 浏览器自动化
- UI交互
TDD 工作流步骤
步骤 1: 编写用户旅程
步骤 2: 生成测试用例
针对每个用户旅程,创建全面的测试用例:
步骤 3: 运行测试(它们应该失败)
步骤 4: 实现代码
编写最少的代码以使测试通过:
步骤 5: 再次运行测试
步骤 6: 重构
在保持测试通过的同时提高代码质量:
- 消除重复
- 改进命名
- 优化性能
- 增强可读性
步骤 7: 验证覆盖率
测试模式
单元测试模式 (Jest/Vitest)
API 集成测试模式
端到端测试模式 (Playwright)
测试文件组织
模拟外部服务
Supabase 模拟
Redis 模拟
OpenAI 模拟
测试覆盖率验证
运行覆盖率报告
覆盖率阈值
应避免的常见测试错误
FAIL: 错误:测试实现细节
PASS: 正确:测试用户可见的行为
FAIL: 错误:脆弱的定位器
PASS: 正确:语义化定位器
FAIL: 错误:没有测试隔离
PASS: 正确:独立的测试
持续测试
开发期间的监视模式
预提交钩子
CI/CD 集成
最佳实践
- 先写测试 - 始终遵循TDD
- 每个测试一个断言 - 专注于单一行为
- 描述性的测试名称 - 解释测试内容
- 组织-执行-断言 - 清晰的测试结构
- 模拟外部依赖 - 隔离单元测试
- 测试边缘情况 - Null、undefined、空、大量数据
- 测试错误路径 - 不仅仅是正常路径
- 保持测试快速 - 单元测试每个 < 50ms
- 测试后清理 - 无副作用
- 审查覆盖率报告 - 识别空白
成功指标
- 达到 80%+ 代码覆盖率
- 所有测试通过(绿色)
- 没有跳过或禁用的测试
- 快速测试执行(单元测试 < 30秒)
- 端到端测试覆盖关键用户流程
- 测试在生产前捕获错误
记住:测试不是可选的。它们是安全网,能够实现自信的重构、快速的开发和生产的可靠性。


