关于 test-generator
test-generator 是面向编码的技能,会在编写新函数或组件时搭建基础测试。它会识别项目的测试框架;完整测试套件和集成测试则交由 @test-engineer 处理。
主要功能
- 01自动建议测试
- 02搭建基础路径与边界测试
- 03识别项目测试框架
- 04支持 Jest、Vitest、Mocha、pytest、unittest、JUnit 和 Go testing
适用场景
- 01为新函数搭建测试
- 02为新组件添加基础测试
- 03为缺少测试文件的实现创建测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ alirezarezvani/ claude-code-tresor --skill test-generator安装后在 Claude Code 中输入/test-generator确认已加载。
附带文件README.md
详细介绍
测试生成技能
编写新代码时自动建议测试。
激活时机
- ✅ 创建新函数
- ✅ 添加新组件
- ✅ 用户提到测试
- ✅ 实现缺少对应的测试文件
- ✅ 用户询问“能测试一下吗?”
我会生成什么
快速搭建测试框架
- 基本的成功路径测试
- Null/undefined 边界情况
- 简单的错误场景
- 符合框架规范的语法(Jest/Vitest/Pytest)
我不会做什么
- 完整的测试套件 → 使用 @test-engineer 子 Agent
- 集成测试 → 使用 @test-engineer 子 Agent
- E2E 测试设计 → 使用 @test-engineer 子 Agent
- 测试策略规划 → 使用 @test-engineer 子 Agent
与 @test-engineer 子 Agent 的关系
我(技能): 快速搭建测试框架 @test-engineer(子 Agent): 全面的测试策略
工作流
- 你编写一个函数
- 我自动生成基本的测试结构
- 你想要完整的测试套件 → 调用 @test-engineer 子 Agent
- 子 Agent 创建全面的测试
示例
JavaScript 函数
// You write:
function calculateDiscount(price, percentage) {
if (price <= 0) throw new Error('Invalid price');
return price * (percentage / 100);
}
// I auto-generate:
describe('calculateDiscount', () => {
it('calculates discount correctly', () => {
expect(calculateDiscount(100, 10)).toBe(10);
});
it('throws error for invalid price', () => {
expect(() => calculateDiscount(0, 10)).toThrow('Invalid price');
});
it('handles zero percentage', () => {
expect(calculateDiscount(100, 0)).toBe(0);
});
// TODO: Add more edge cases
// Consider: negative percentages, decimal values, very large numbers
});
React 组件
// You write:
function UserCard({ user, onEdit }) {
return (
<div className="user-card">
<h2>{user.name}</h2>
<button onClick={() => onEdit(user.id)}>Edit</button>
</div>
);
}
// I auto-generate:
import { render, screen, fireEvent } from '@testing-library/react';
describe('UserCard', () => {
const mockUser = { id: 1, name: 'John Doe' };
const mockOnEdit = jest.fn();
it('renders user name', () => {
render(<UserCard user={mockUser} onEdit={mockOnEdit} />);
expect(screen.getByText('John Doe')).toBeInTheDocument();
});
it('calls onEdit with user id when button clicked', () => {
render(<UserCard user={mockUser} onEdit={mockOnEdit} />);
fireEvent.click(screen.getByText('Edit'));
expect(mockOnEdit).toHaveBeenCalledWith(1);
});
// TODO: Add tests for edge cases
// - Missing user data
// - Undefined onEdit
// - Long names (UI testing)
});
Python 函数
# You write:
def fetch_user_data(user_id: int) -> dict:
if user_id <= 0:
raise ValueError("Invalid user ID")
return db.query("SELECT * FROM users WHERE id = ?", [user_id])
# I auto-generate:
import pytest
def test_fetch_user_data_success():
"""Test successful user data retrieval"""
result = fetch_user_data(1)
assert isinstance(result, dict)
assert 'id' in result
def test_fetch_user_data_invalid_id():
"""Test with invalid user ID"""
with pytest.raises(ValueError, match="Invalid user ID"):
fetch_user_data(0)
def test_fetch_user_data_negative_id():
"""Test with negative ID"""
with pytest.raises(ValueError):
fetch_user_data(-1)
# TODO: Add integration tests with database
# TODO: Test database connection failures
框架检测
我会自动检测你的测试框架:
- JavaScript/TypeScript:Jest、Vitest、Mocha
- Python:pytest、unittest
- Java:JUnit
- Go:testing 包
检测依据:
- package.json 依赖项
- requirements.txt
- 现有测试文件
- Import 语句
测试模式
单元测试
// Function testing
test('adds numbers correctly', () => {
expect(add(2, 3)).toBe(5);
});
组件测试
// React component testing
test('button click triggers callback', () => {
const onClick = jest.fn();
render(<Button onClick={onClick} />);
fireEvent.click(screen.getByRole('button'));
expect(onClick).toHaveBeenCalled();
});
边界情况
// Boundary testing
test('handles empty input', () => {
expect(processData([])).toEqual([]);
});
test('handles null input', () => {
expect(processData(null)).toBeNull();
});
何时使用子 Agent
在以下情况下调用 @test-engineer:
- 完整的测试套件(20 个以上测试)
- 集成测试策略
- E2E 测试规划
- 测试覆盖率目标
- 复杂的模拟场景
示例:
Me: "Generated 3 basic tests for calculateDiscount()"
You: "@test-engineer create comprehensive test suite with all edge cases"
Sub-agent: [Creates 25+ tests covering all scenarios]
沙箱兼容性
无需沙箱即可运行: ✅ 是 在沙箱中运行: ✅ 是
- 文件系统:将测试文件写入项目
- 网络:无需网络
- 配置:无需配置
自定义
编辑测试模板:
cp -r ~/.claude/skills/development/test-generator \
~/.claude/skills/development/my-test-generator
# Edit SKILL.md to customize:
# - Test patterns
# - Framework preferences
# - Coverage expectations
与命令集成
/test-gen 命令
/test-gen --file utils.js --framework jest --coverage 90
# Combines:
# 1. My quick scaffolding
# 2. @test-engineer comprehensive tests
# 3. Full test file generation
提示
- 先让我搭建框架 - 在调用子 Agent 前先检查
- 添加 TODO - 对于复杂情况,我会添加 TODO 注释
- 保持框架一致 - 我会遵循项目的测试风格
- 快速迭代 - 如果不满意,可以重新生成
相关工具
- @test-engineer:创建全面的测试套件
- code-reviewer skill:标记需要测试的代码
- /test-gen command:完整的测试生成工作流
评论
支持 Markdown