test-generator
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTest Generator Skill
Test Generator Skill
Auto-suggest tests when you write new code.
在你编写新代码时自动生成测试建议。
When I Activate
触发场景
- ✅ New function created
- ✅ New component added
- ✅ User mentions testing or tests
- ✅ Test file missing for implementation
- ✅ User asks "can you test this?"
- ✅ 新增函数
- ✅ 新增组件
- ✅ 用户提及测试相关内容
- ✅ 实现代码缺少对应测试文件
- ✅ 用户询问“你能测试这个吗?”
What I Generate
我能生成的内容
Quick Test Scaffolding
快速测试脚手架
- Basic happy path tests
- Null/undefined edge cases
- Simple error scenarios
- Framework-appropriate syntax (Jest/Vitest/Pytest)
- 基础正常流程测试
- Null/undefined边界情况测试
- 简单错误场景测试
- 适配对应框架的语法(Jest/Vitest/Pytest)
What I Don't Do
我不负责的内容
- Comprehensive test suites → Use @test-engineer sub-agent
- Integration tests → Use @test-engineer sub-agent
- E2E test design → Use @test-engineer sub-agent
- Test strategy planning → Use @test-engineer sub-agent
- 完整测试套件 → 使用**@test-engineer**子Agent
- 集成测试 → 使用**@test-engineer**子Agent
- E2E测试设计 → 使用**@test-engineer**子Agent
- 测试策略规划 → 使用**@test-engineer**子Agent
Relationship with @test-engineer Sub-Agent
与@test-engineer 子Agent的关系
Me (Skill): Quick test scaffolding
@test-engineer (Sub-Agent): Comprehensive testing strategy
我(Skill): 快速测试脚手架生成
@test-engineer(子Agent): 完整测试策略制定
Workflow
工作流程
- You write a function
- I auto-generate basic test structure
- You want full suite → Invoke @test-engineer sub-agent
- Sub-agent creates comprehensive tests
- 你编写函数
- 我自动生成基础测试结构
- 若需要完整测试套件 → 调用**@test-engineer**子Agent
- 子Agent创建全面的测试用例
Examples
示例
JavaScript Function
JavaScript函数
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
});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 Component
React组件
jsx
// 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)
});jsx
// 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 Function
Python函数
python
undefinedpython
undefinedYou write:
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])
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:
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)
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: Add integration tests with database
TODO: Test database connection failures
TODO: Test database connection failures
undefinedundefinedFramework Detection
框架自动识别
I automatically detect your testing framework:
- JavaScript/TypeScript: Jest, Vitest, Mocha
- Python: pytest, unittest
- Java: JUnit
- Go: testing package
Detection based on:
- package.json dependencies
- requirements.txt
- Existing test files
- Import statements
我会自动识别你的测试框架:
- JavaScript/TypeScript:Jest、Vitest、Mocha
- Python:pytest、unittest
- Java:JUnit
- Go:testing包
识别依据:
- package.json依赖
- requirements.txt
- 现有测试文件
- 导入语句
Test Patterns
测试模式
Unit Tests
单元测试
javascript
// Function testing
test('adds numbers correctly', () => {
expect(add(2, 3)).toBe(5);
});javascript
// Function testing
test('adds numbers correctly', () => {
expect(add(2, 3)).toBe(5);
});Component Tests
组件测试
jsx
// React component testing
test('button click triggers callback', () => {
const onClick = jest.fn();
render(<Button onClick={onClick} />);
fireEvent.click(screen.getByRole('button'));
expect(onClick).toHaveBeenCalled();
});jsx
// React component testing
test('button click triggers callback', () => {
const onClick = jest.fn();
render(<Button onClick={onClick} />);
fireEvent.click(screen.getByRole('button'));
expect(onClick).toHaveBeenCalled();
});Edge Cases
边界情况测试
javascript
// Boundary testing
test('handles empty input', () => {
expect(processData([])).toEqual([]);
});
test('handles null input', () => {
expect(processData(null)).toBeNull();
});javascript
// Boundary testing
test('handles empty input', () => {
expect(processData([])).toEqual([]);
});
test('handles null input', () => {
expect(processData(null)).toBeNull();
});When to Use Sub-Agent
何时使用子Agent
Invoke @test-engineer for:
- Complete test suites (20+ tests)
- Integration test strategy
- E2E test planning
- Test coverage goals
- Complex mocking scenarios
Example:
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]在以下场景调用**@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]Sandboxing Compatibility
沙箱兼容性
Works without sandboxing: ✅ Yes
Works with sandboxing: ✅ Yes
- Filesystem: Writes test files to project
- Network: None required
- Configuration: None required
无需沙箱即可运行: ✅ 是
沙箱环境下可运行: ✅ 是
- 文件系统:将测试文件写入项目目录
- 网络:无需网络
- 配置:无需额外配置
Customization
自定义配置
Edit test templates:
bash
cp -r ~/.claude/skills/development/test-generator \
~/.claude/skills/development/my-test-generator编辑测试模板:
bash
cp -r ~/.claude/skills/development/test-generator \
~/.claude/skills/development/my-test-generatorEdit SKILL.md to customize:
Edit SKILL.md to customize:
- Test patterns
- Test patterns
- Framework preferences
- Framework preferences
- Coverage expectations
- Coverage expectations
undefinedundefinedIntegration with Commands
与命令的集成
/test-gen Command
/test-gen 命令
bash
/test-gen --file utils.js --framework jest --coverage 90bash
/test-gen --file utils.js --framework jest --coverage 90Combines:
Combines:
1. My quick scaffolding
1. My quick scaffolding
2. @test-engineer comprehensive tests
2. @test-engineer comprehensive tests
3. Full test file generation
3. Full test file generation
undefinedundefinedTips
使用技巧
- Let me scaffold first - Review before invoking sub-agent
- Add TODOs - I include TODO comments for complex cases
- Framework consistency - I match your project's testing style
- Quick iteration - Regenerate if not satisfied
- 先让我生成脚手架 - 先查看再调用子Agent
- 添加TODO项 - 我会为复杂场景添加TODO注释
- 框架一致性 - 我会匹配项目的测试风格
- 快速迭代 - 若不满意可重新生成
Related Tools
相关工具
- @test-engineer: Comprehensive test suite creation
- code-reviewer skill: Flags code that needs testing
- /test-gen command: Full test generation workflow
- @test-engineer:完整测试套件创建
- code-reviewer skill:标记需要测试的代码
- /test-gen command:完整测试生成工作流