公司动态

Superpowers 测试驱动开发完整指南:一次提交跑完的 4 个关键动作

📅 2026/8/28 12:37:47
Superpowers 测试驱动开发完整指南:一次提交跑完的 4 个关键动作
Superpowers 测试驱动开发完整指南一次提交跑完的 4 个关键动作【免费下载链接】superpowersAn agentic skills framework software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowers最近 review 了几个提交给 Superpowers 的新手 PR发现一个共同点代码能跑但没人敢动它——因为没有一个测试敢先跑起来。这个项目把测试驱动开发TDD先写测试、再写实现的开发方法当成硬性纪律没有先失败的测试就不许写生产代码。下面以一个真实的小功能给上传接口加 2 MiB 上限为例按一次提交的顺序把 4 个动作走一遍。先看看没有测试的提交长什么样想象另一种做法你凭感觉写完checkUpload手动丢几个文件进去试试感觉没问题提交。三个月后有人把上限从 2 MiB 改成了 5 MiB没有任何东西报警或者空文件名悄悄通过了校验等用户反馈才被发现。场景先写实现后补测试先让测试失败再写实现行为被改坏时没人发现直到用户反馈测试立刻变红提交前就拦住重构时只能手动回归漏一个算一个随便改名、提函数断言兜底新人接手靠口口相传它大概是这么回事测试本身就是行为说明书后补的测试第一次运行就会直接通过——它证明不了任何事。你先看到它失败才证明它真的在盯住这个行为。这就是 Superpowers 铁律的含义写了测试之前的实现代码删掉重来。RED 阶段怎么写第一个必定失败的测试RED 阶段即先让测试跑红的环节 只干一件事用最小的一条测试描述你期望的行为。上限还没实现所以它必须失败test(rejects uploads over 2 MiB, () { const result checkUpload(notes.txt, 3 * 1024 * 1024); expect(result.error).toBe(file too large); });写完立刻跑并且亲眼确认它失败npm test tests/upload.test.jsFAIL rejects uploads over 2 MiB expected file too large, got undefined失败的姿势也要对三个确认点测试是失败fail不是报错error比如拼错方法名失败信息正是你预期的expected ... got undefined失败原因是功能没写而不是手误。如果测试一上来就通过了说明你测的是已有行为改测试而不是改代码。命名上有个小技巧名字里出现and / 和就把它拆成两个测试每个只盯一个行为。GREEN 阶段只写刚好让测试变绿的代码GREEN 阶段用最少代码让测试变绿的环节 的目标只有一个从红变绿。多一行都不要function checkUpload(fileName, sizeBytes) { if (sizeBytes 2 * 1024 * 1024) { return { error: file too large }; } return { ok: true, name: fileName }; }这一步最容易犯的错是顺手优化加配置项、加日志、加重试参数——测试没要求的东西一概不写。再跑一次测试npm test tests/upload.test.js确认三件事新测试通过、其余测试仍然通过、输出里没有多余的警告。REFACTOR 阶段重构时如何保证断言不跑红 只有绿灯亮着才允许重构。现在可以把魔法数字提出来、把参数名改清楚const MAX_UPLOAD_BYTES 2 * 1024 * 1024; // 2 MiB function checkUpload(fileName, sizeBytes) { if (sizeBytes MAX_UPLOAD_BYTES) { return { error: file too large }; } return { ok: true, name: fileName }; }纪律只有一条每改一处立刻跑一次测试。哪一步跑红了就停在哪一步回退绝不让红灯先欠着。重构只动结构、不动行为——消除重复、改命名、抽公共函数都不例外。测试放在哪Superpowers 仓库里的真实位置熟悉仓库的人会发现这套循环在项目里是有物理位置的TDD 的完整纪律含铁律和常见借口对照表写在 SKILL.md写测试的细节规则断言真实行为、mock 的边界在 writing-good-tests.mdJS 侧的现成测试在tests/brainstorm-server/目录auth.test.js等文件直接用node执行npm test按顺序串起整个套件技能行为测试由tests/claude-code/run-skill-tests.sh统一调度支持--test参数只跑单个文件每个用例有独立超时预算最后输出 PASS/FAIL 汇总。想单独验证一个用例时bash tests/claude-code/run-skill-tests.sh --test test-sdd-workspace.sh修 bug 时同样套这个循环先写一条能复现 bug 的失败测试再让修复把它变绿。这样这个回归就被永久锁死在测试里了。卡住了怎么办卡点解法不知道断言写什么先把希望长什么样的 API 写出来期望值用手算的字面量写死还卡住就问 reviewer测试越写越绕测试复杂通常意味着设计复杂回去简化接口什么都得 mock伪造对象说明耦合太紧改用依赖注入让真实实现能喂进去搭建代码堆了几十行抽成 helper 函数抽完还是长就该拆模块了提交前过一遍这份清单每个新函数都有测试且我在实现前亲眼见过它失败失败原因是功能还没写不是拼写或语法错误GREEN 阶段只写了最小代码没夹带配置项和顺手优化重构的每一步之后测试都是绿的全套测试通过输出里没有多余的报错与警告边界情况有覆盖0 字节文件、恰好等于上限的 2 MiB有勾不上的条目就先别提交——从头再跑一遍循环永远比上线后排查更快。【免费下载链接】superpowersAn agentic skills framework software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考