mcpField
T
test-generator

test-generator

github.com/alirezarezvani测试与质量78236 次安装35 周前更新
代码仓库

关于 test-generator

test-generator 是面向编码的技能,会在编写新函数或组件时搭建基础测试。它会识别项目的测试框架;完整测试套件和集成测试则交由 @test-engineer 处理。

主要功能

  1. 01自动建议测试
  2. 02搭建基础路径与边界测试
  3. 03识别项目测试框架
  4. 04支持 Jest、Vitest、Mocha、pytest、unittest、JUnit 和 Go testing

适用场景

  1. 01为新函数搭建测试
  2. 02为新组件添加基础测试
  3. 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): 全面的测试策略

工作流
  1. 你编写一个函数
  2. 我自动生成基本的测试结构
  3. 你想要完整的测试套件 → 调用 @test-engineer 子 Agent
  4. 子 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

提示

  1. 先让我搭建框架 - 在调用子 Agent 前先检查
  2. 添加 TODO - 对于复杂情况,我会添加 TODO 注释
  3. 保持框架一致 - 我会遵循项目的测试风格
  4. 快速迭代 - 如果不满意,可以重新生成

相关工具

  • @test-engineer:创建全面的测试套件
  • code-reviewer skill:标记需要测试的代码
  • /test-gen command:完整的测试生成工作流

评论

支持 Markdown