name: backend-test-writer description: 用于为后端代码生成测试(Express路由、MongoDB模型、Node服务) - 分析文件类型,从package.json检测测试框架,生成包含设置/清理和边缘情况覆盖的全面测试
后端测试编写器
为MERN堆栈代码生成全面的后端测试。分析文件类型,检测项目约定,生成实际可运行的测试。
理念: 智能默认值,零配置。从项目中检测一切。
<workflow>
工作流程
复制并跟踪进度:
- [ ] 阶段0:基础设施检查
- [ ] 阶段1:分析目标文件
- [ ] 阶段2:生成测试
- [ ] 阶段3:报告总结
阶段0:基础设施检查
在生成测试之前,验证设置:
- 检查
package.json中的测试框架(Jest/Vitest/Mocha) - 如果没有 → 提示:“设置Jest + Supertest?”
- 检查
mongodb-memory-server(集成测试所需) - 检测测试文件约定(同目录放置 vs
__tests__/vstests/)
停止条件: 没有测试框架且用户拒绝设置。
阶段1:分析目标文件
| 模式 | 类型 | 测试方法 |
|---|---|---|
routes/, *.routes.js |
路由 | 集成测试(Supertest + 真实数据库) |
controllers/ |
控制器 | 集成测试 |
services/ |
服务 | 单元测试(模拟依赖) |
models/, *.model.js |
模型 | 单元测试(验证测试) |
middleware/ |
中间件 | 单元测试(模拟req/res/next) |
utils/, helpers/ |
工具 | 单元测试(纯函数) |
覆盖: 用户可以指定--unit或--integration。
阶段2:生成测试
按顺序处理文件并显示进度。用户可以随时停止。
每个测试包括:
- 为检测到的框架正确导入
- 设置/清理(数据库连接、清理)
- 全面覆盖:
- 成功案例(正常路径)
- 验证错误(400)
- 未找到(404)
- 认证失败(401/403)(如果受保护)
- 边缘情况(重复、空值、null)
参考: 查看test-patterns.md获取完整代码示例。
阶段3:报告
已生成:X 个测试文件
覆盖率:总计 Y 个测试用例
下一步:运行 `npm test` 进行验证
</workflow>
<quick-reference>
快速参考
| 文件类型 | 导入 | 数据库设置 |
|---|---|---|
| 路由 | supertest, mongodb-memory-server |
真实(内存中) |
| 服务 | jest |
模拟 |
| 模型 | mongoose |
模拟 |
| 中间件 | jest |
无 |
测试结构模式
describe('[资源] [方法]', () => {
describe('成功案例', () => {
it('应该 [预期行为]', async () => {});
});
describe('验证错误', () => {
it('对于 [无效情况] 应该返回400', async () => {});
});
describe('边缘情况', () => {
it('应该处理 [边缘情况]', async () => {});
});
});
</quick-reference>
<checklists>
检查清单
基础设施(首先检查)
- [ ]
package.json中有测试框架 - [ ] 定义了测试脚本(
"test": "jest") - [ ] 安装了Supertest(集成测试)
- [ ] 安装了mongodb-memory-server(数据库测试)
按文件生成
- [ ] 首先检查现有测试(如果找到则进行差距分析)
- [ ] 为文件类型正确导入
- [ ] 包含设置/清理
- [ ] 测试了正常路径
- [ ] 测试了错误情况(400, 404, 401)
- [ ] 测试了边缘情况(特定领域:日期→夏令时/时区,货币→精度等)
- [ ] 断言中没有秘密信息
- [ ] 正确处理了Async/await
- [ ] 为每个测试分配了优先级(P0=关键,P1=重要,P2=锦上添花)
- [ ] 为复杂输入建议了测试辅助工厂
</checklists>
<common-mistakes>
常见错误
| 错误 | 修复 |
|---|---|
| 在测试中启动服务器 | 导入app,让Supertest处理 |
| 没有数据库清理 | 添加带有deleteMany({})的afterEach |
| 测试实现 | 通过HTTP接口测试行为 |
| 缺少async/await | 等待异步操作 |
| 在集成测试中模拟 | 集成测试使用真实数据库 |
</common-mistakes>
<guidelines>
指南
- 不要为无法读取的代码生成测试
- 不要跳过基础设施检查
- 不要只生成正常路径测试
- 不要忘记测试之间的清理
</guidelines>
<references>
参考文件
在实现特定模式时加载:
| 何时 | 参考 |
|---|---|
| 编写任何测试时 | test-patterns.md |
| 设置测试基础设施时 | test-setup.md |
</references>