Skip to content

📄 本页由源文件 skills/dev-flow/references/tdd-mode.md 自动投影生成(单一权威源)。请勿直接编辑本页。

可选 TDD 模式(RED-GREEN-REFACTOR)

本文件由步骤 5 按需加载。当 AI 识别到适合 TDD 的场景时主动建议开启,用户也可显式要求。

适用场景(AI 主动建议开启)

场景示例
纯逻辑函数数据转换、格式化、计算、排序、过滤
工具函数/Utils字符串处理、日期处理、URL 解析
自定义 Hooks(纯逻辑)useDebounce、useLocalStorage、usePagination
状态机/Reducer复杂状态转换逻辑
API 数据层请求封装、响应转换、错误映射
正则表达式输入校验、文本提取

不适用场景(默认关闭)

场景原因
UI 组件渲染样式/布局难以用 TDD 驱动,快照测试价值有限
交互动画/过渡视觉效果需浏览器验证,非测试可覆盖
第三方库集成依赖外部行为,mock 成本高且易脆弱
一次性脚本/配置投入产出比低
样式调整CSS 变更无法有效 TDD

TDD 循环流程(RED-GREEN-REFACTOR)

🔴 RED:先写失败测试

  1. 根据计划中的功能点,编写最小化的测试用例
  2. 测试必须描述预期行为,而非实现细节
  3. 运行测试,确认测试失败(且失败原因是功能未实现,而非语法错误)
  4. 每次只写 1 个测试用例,不要批量写
typescript
// ✅ 好的测试:描述行为
it("should format date as YYYY-MM-DD", () => {
expect(formatDate(new Date(2026, 0, 15))).toBe("2026-01-15");
});

// ❌ 差的测试:测试实现细节
it("should call toISOString and split by T", () => { ... });

🟢 GREEN:写最小代码通过测试

  1. 只写刚好让测试通过的最小代码
  2. 不要提前优化,不要写"将来可能需要"的代码
  3. 运行测试,确认测试通过
  4. 如果测试仍失败,修复代码直到通过(不修改测试)

🔵 REFACTOR:重构(测试保持通过)

  1. 消除重复代码、改善命名、提取函数
  2. 每次重构后立即运行测试,确保仍然通过
  3. 重构不改变行为,只改善结构
  4. 重构完成后进入下一个 RED 循环

执行规则

  • 每个 RED-GREEN-REFACTOR 循环处理一个功能点
  • 循环之间保持测试全部通过的状态
  • 遇到需要修改已有测试的情况 → 暂停,向用户说明原因
  • TDD 模式下的测试文件也计入步骤 5 的 files_created 产出
  • 测试文件命名遵循项目已有约定(如 *.test.ts*.spec.ts

触发方式

方式说明
AI 主动建议识别到适用场景时,在步骤 5 开始前建议开启
用户显式要求用户说"用 TDD"/"测试驱动"/"先写测试"
计划中标注步骤 3 计划表中标注"TDD 模式"

与步骤 6 的关系

  • TDD 模式下,步骤 6A V5(测试验证)的测试已在步骤 5 中编写并通过
  • 步骤 6A 仍需执行完整验证管线(Build/Type/Lint 等),TDD 不替代其他验证
  • TDD 产出的测试覆盖率可作为步骤 6 的质量指标之一

基于「单一权威源」哲学构建 —— 文档由源文件投影生成