test-generator

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Test 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

工作流程

  1. You write a function
  2. I auto-generate basic test structure
  3. You want full suite → Invoke @test-engineer sub-agent
  4. Sub-agent creates comprehensive tests
  1. 你编写函数
  2. 我自动生成基础测试结构
  3. 若需要完整测试套件 → 调用**@test-engineer**子Agent
  4. 子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
undefined
python
undefined

You 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

undefined
undefined

Framework 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-generator

Edit SKILL.md to customize:

Edit SKILL.md to customize:

- Test patterns

- Test patterns

- Framework preferences

- Framework preferences

- Coverage expectations

- Coverage expectations

undefined
undefined

Integration with Commands

与命令的集成

/test-gen Command

/test-gen 命令

bash
/test-gen --file utils.js --framework jest --coverage 90
bash
/test-gen --file utils.js --framework jest --coverage 90

Combines:

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

undefined
undefined

Tips

使用技巧

  1. Let me scaffold first - Review before invoking sub-agent
  2. Add TODOs - I include TODO comments for complex cases
  3. Framework consistency - I match your project's testing style
  4. Quick iteration - Regenerate if not satisfied
  1. 先让我生成脚手架 - 先查看再调用子Agent
  2. 添加TODO项 - 我会为复杂场景添加TODO注释
  3. 框架一致性 - 我会匹配项目的测试风格
  4. 快速迭代 - 若不满意可重新生成

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:完整测试生成工作流