mcpField
Z
zombies

zombies

github.com/unlearndev测试与质量105143 次安装3 周前更新
代码仓库

关于 zombies

ZOMBIES 是一项技能,使用 ZOMBIES 测试框架帮助开发者为功能找出有价值的测试思路。它会查找相关实现和现有测试,报告具体缺口,但不会编写或生成测试代码。

主要功能

  1. 01从参数或 git diff 确定功能范围
  2. 02基于 ZOMBIES 生成测试思路
  3. 03查找实现代码与现有测试
  4. 04识别尚未覆盖的行为
  5. 05按固定类别顺序整理报告
  6. 06不生成测试代码

适用场景

  1. 01检查指定功能的测试情况
  2. 02从分支差异中查找测试缺口
  3. 03围绕边界情况和失败规划测试
  4. 04避免重复建议已覆盖的行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/unlearndev/skills --skill zombies

安装后在 Claude Code 中输入/zombies确认已加载。

详细介绍

ZOMBIES

参数

原始参数:$ARGUMENTS

如果提供了参数,请将其视为自由文本功能描述(例如“验证码登录流程”“图片上传验证”)。使用 Grep/Glob 自行定位相关代码和测试。

如果参数为空,请运行 git diff main...HEAD,并将差异作为功能范围。

目标

使用 ZOMBIES 作为思考工具,找出该功能最值得编写的测试。输出一份测试点列表,供用户自行编写测试骨架——不要编写或搭建测试。

ZOMBIES 代表:

  • Zero — 无输入/空状态
  • One — 单个输入/正常流程
  • Many — 多个输入、排序、分页、并发
  • Boundaries — 边界、差一错误、最小/最大长度、时间边界、类型边界
  • Interface — 公共 API 的契约/形式(返回类型、状态码、重定向)
  • Exceptions — 无效输入、失败、已过期/已使用/缺失的状态、认证失败
  • Simple scenarios — 真实用户日常使用的常见路径

跳过不适用的类别。 只读端点可能没有任何“Many”测试。纯验证器可能没有任何“Interface”测试。只列出确实值得编写的测试——重质量,不重覆盖率。

说明

1. 定位功能
  • 有参数时:使用 Grep/Glob 在代码库中搜索与描述匹配的文件。阅读实现文件(控制器、模型、操作、验证器),以及已有的测试文件(如果存在)。
  • 无参数时:运行 git diff --name-status main...HEAD 和 git diff main...HEAD,然后阅读有变更的实现文件。跳过自动生成的文件(锁文件、编译后的资源、生成的路由/类型定义)。
2. 生成 ZOMBIES 建议

对于 ZOMBIES 的每个字母,思考:这里是否有一个测试能捕获真实 bug,或记录实际行为? 如果有,就列出;如果没有,就跳过该字母。

与现有测试文件交叉检查。 此技能输出的是待编写的测试,而不是覆盖率清单,因此:

  • 跳过现有测试已充分覆盖的行为。 已覆盖的行为不属于待编写的测试;列出它们会掩盖重要的缺口。
  • 保留仅部分覆盖的行为——测试涉及该行为,但缺少重要断言(例如,断言登录成功后发生重定向,却没有检查验证码是否已被使用)。在项目符号前加上 [partial],并指出缺少的断言。
  • 如果不确定某项行为是否已被测试覆盖,请保留该项目,而不是将其删除——误判为“已覆盖”会悄无声息地掩盖真实缺口。

建议质量标准:

  • 具体,不要泛泛而谈。 “测试电子邮件长度上限(255 个字符)”优于“测试边界”。
  • 尽可能引用代码中的实际值——例如迁移中的列长度、配置中的过期时间、FormRequest 中的验证规则。
  • 每个项目符号对应一个测试。 不要把“测试 A 和 B”合并在一行。
  • 描述要验证的行为,而不是方法名。“已过期的登录验证码返回 422”优于“test_expired_code”。
3. 输出报告

先按功能领域分组(如果差异涵盖多个功能),再按每个功能中的 ZOMBIES 字母分组。字母始终按 ZOMBIES 顺序排列——Zero、One、Many、Boundaries、Interface、Exceptions、Simple。 跳过某个字母不会改变其余字母的顺序:展示的字母仍须按固定顺序从上到下排列(例如,即使跳过了 Zero、One 和 Many,也要先展示 Boundaries,再展示 Interface,最后展示 Exceptions)。严格使用以下格式:

## 🧟 [Feature Area]

**Boundaries**
- Email field rejects values longer than 255 chars (matches migration column)
- Sign-in code expires exactly at the 15-minute mark

**Exceptions**
- Expired code returns a validation error
- Already-used code cannot be redeemed twice
- Submitting code for an unknown email fails silently (no user enumeration)

**Simple**
- Requesting a code emails the user and creates a `SignInCode` row
- [partial] valid code logs the user in — existing test asserts the redirect but never asserts the code is consumed

🧟 前缀和 ## 级别共同使功能标题区别于加粗的 **Letter** 子标题——两者都要保留。如果涉及多个功能,请为每个功能重复此区块,并用 --- 水平线分隔,以明确标示功能边界。

最后用一行总结:X test ideas.

如果没有值得测试的内容(例如,仅有无关紧要的重命名或纯配置更改),请严格输出:

✅ Nothing worth writing tests for.

规则

  • 不要编写占位测试。 此技能只输出测试思路——测试由用户编写。
  • 跳过不适用的 ZOMBIES 字母。 不要写“(无)”占位内容。质量优先于覆盖率。
  • 只列出缺口。 跳过已有测试已完整覆盖的行为。对部分覆盖的行为,添加 [partial] 前缀,并指出缺少的断言。不确定时,保留该项——切勿悄然忽略真实缺口。
  • 始终保持 ZOMBIES 顺序。 展示的部分必须按 Zero → One → Many → Boundaries → Interface → Exceptions → Simple 排列。可以跳过字母,但其余字母不得调换顺序。
  • 每个功能领域中的每个字母只能有一个标题。 每个 ZOMBIES 字母在一个功能领域中最多出现一次——将该字母的所有要点汇总到同一个标题下。不要重复字母标题。
  • 具体明确。 引用代码中的实际长度、时间、状态和路由名称。泛泛的建议毫无价值。
  • 每个要点只描述一种行为。 不要用“并且”连接两个测试。
  • 不提供实现提示。 只说明要验证什么,不要建议断言、工厂或测试设置。
  • 先按功能分组,再按字母分组。 如果差异涉及多个功能,不要把所有内容都塞进一个 ZOMBIES 列表。
  • 不要添加前言。 不要写“以下是我建议的测试……”。从第一个 ## [Feature Area] 标题开始。
  • 除 X test ideas. 总结行外,不要添加结束建议。

评论

支持 Markdown