测试生成器Skill test-generator

测试生成技能用于自动生成各种类型的测试代码,包括单元测试、集成测试和端到端测试,基于项目规格和现有模式,提高软件质量和测试效率。关键词:测试生成、自动化测试、代码测试、单元测试、集成测试、E2E测试、API测试、软件开发。

测试 0 次安装 0 次浏览 更新于 3/10/2026

名称: test-generator 描述: 从规格、组件和API端点生成测试代码。遵循项目测试模式和惯例创建单元测试、集成测试和端到端测试。 版本: 1.0 模型: sonnet 调用者: both 用户可调用: true 工具: [Read, Write, Glob, Grep] 最佳实践:

  • 分析现有测试模式
  • 遵循项目测试惯例
  • 生成全面测试覆盖
  • 包括边缘案例和错误场景
  • 使用适当的测试框架 错误处理: graceful 流支持: supported 模板: [unit-test, integration-test, e2e-test, api-test] 已验证: false 最后验证时间: 2026-02-19T05:29:09.098Z

模式:认知/提示驱动 — 没有独立的实用脚本;通过代理上下文使用。

<身份> 测试生成技能 - 从规格、组件和API端点生成测试代码,遵循项目测试模式和惯例。 </身份>

<能力>

  • 为新组件生成测试
  • 为API端点创建测试
  • 为用户流程生成端到端测试
  • 创建集成测试
  • 为现有代码添加测试覆盖 </能力>

<指令> <执行过程>

步骤1: 确定测试类型

确定需要什么类型的测试:

  • 单元测试: 组件/函数测试
  • 集成测试: 服务/API集成测试
  • 端到端测试: 完整用户流程测试
  • API测试: 端点测试

步骤2: 分析目标代码

检查要测试的代码(使用并行读取/搜索/全局搜索):

  • 读取组件/函数代码
  • 识别测试案例
  • 理解依赖关系
  • 注意边缘案例

步骤3: 分析测试模式

审查现有测试:

  • 读取类似测试文件
  • 识别测试模式
  • 注意测试框架使用
  • 理解模拟策略

步骤4: 生成测试代码

创建测试,遵循模式:

  • 使用适当的测试框架
  • 遵循项目惯例
  • 包括全面覆盖
  • 添加边缘案例和错误场景

步骤5: 覆盖分析

生成测试后,分析覆盖:

  1. 检查生成的测试是否覆盖所有要求:

    • 验证所有函数/方法都经过测试
    • 检查所有分支都被覆盖(如果/否则,切换等)
    • 确保所有边缘案例都经过测试
    • 验证错误场景被覆盖
  2. 验证测试可运行:

    • 检查测试语法有效
    • 验证导入正确
    • 确保测试框架正确配置
    • 验证测试设置/清理正确
  3. 报告覆盖百分比:

    • 计算行覆盖(如果可能)
    • 计算分支覆盖(如果可能)
    • 报告未覆盖的代码路径
    • 建议为未覆盖区域添加额外测试
  4. 覆盖验证清单:

    • [ ] 所有公共函数/方法都有测试
    • [ ] 所有错误路径都经过测试
    • [ ] 所有边缘案例都被覆盖
    • [ ] 测试语法有效
    • [ ] 测试可以成功执行
    • [ ] 覆盖满足项目阈值(如果定义) </执行过程> </指令>

<示例> <代码示例> 单元测试(React组件)

import { render, screen, waitFor } from '@testing-library/react'
import { describe, it, expect, vi } from 'vitest'
import { UserProfile } from './user-profile'

describe('UserProfile', () => {
  it('renders user information', async () => {
    const mockUser = { id: '1', name: 'John', email: 'john@example.com' }

    render(<UserProfile user={mockUser} />)

    await waitFor(() => {
      expect(screen.getByText('John')).toBeInTheDocument()
      expect(screen.getByText('john@example.com')).toBeInTheDocument()
    })
  })

  it('handles loading state', () => {
    render(<UserProfile user={null} loading />)
    expect(screen.getByTestId('loading')).toBeInTheDocument()
  })

  it('handles error state', () => {
    render(<UserProfile user={null} error="Failed to load" />)
    expect(screen.getByText('Failed to load')).toBeInTheDocument()
  })
})

</代码示例>

<代码示例> 集成测试(API)

import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { createTestClient } from './test-client';

describe('Users API', () => {
  let client: TestClient;

  beforeAll(() => {
    client = createTestClient();
  });

  afterAll(async () => {
    await client.cleanup();
  });

  it('creates a user', async () => {
    const response = await client.post('/api/users', {
      email: 'test@example.com',
      name: 'Test User',
    });

    expect(response.status).toBe(201);
    expect(response.data).toHaveProperty('id');
    expect(response.data.email).toBe('test@example.com');
  });

  it('validates required fields', async () => {
    const response = await client.post('/api/users', {});

    expect(response.status).toBe(400);
    expect(response.data).toHaveProperty('errors');
  });
});

</代码示例>

<代码示例> 端到端测试(Cypress)

describe('User Authentication Flow', () => {
  beforeEach(() => {
    cy.visit('/login');
  });

  it('allows user to login', () => {
    cy.get('[data-testid="email-input"]').type('user@example.com');
    cy.get('[data-testid="password-input"]').type('password123');
    cy.get('[data-testid="login-button"]').click();

    cy.url().should('include', '/dashboard');
    cy.get('[data-testid="user-menu"]').should('be.visible');
  });

  it('shows error for invalid credentials', () => {
    cy.get('[data-testid="email-input"]').type('invalid@example.com');
    cy.get('[data-testid="password-input"]').type('wrong');
    cy.get('[data-testid="login-button"]').click();

    cy.get('[data-testid="error-message"]')
      .should('be.visible')
      .and('contain', 'Invalid credentials');
  });
});

</代码示例> </示例>

<指令> <集成> 与开发者代理集成:

  • 在开发期间生成测试
  • 确保测试覆盖
  • 验证实现

与QA代理集成:

  • 创建全面测试套件
  • 生成测试计划
  • 验证测试质量 </集成>

<最佳实践>

  1. 遵循模式: 匹配现有测试结构
  2. 全面覆盖: 测试正常路径和边缘案例
  3. 清晰测试名称: 描述性测试描述
  4. 隔离测试: 每个测试应独立
  5. 模拟依赖: 使用适当的模拟策略 </最佳实践> </指令>

<示例> <使用示例> 示例命令:

# 为文件生成测试
node .claude/skills/test-generator/scripts/main.cjs src/components/UserProfile.tsx

# 工具将分析文件并生成适当的测试

</使用示例> </示例>

内存协议(强制)

开始前: 读取 .claude/context/memory/learnings.md

完成后:

  • 新模式 -> .claude/context/memory/learnings.md
  • 发现的问题 -> .claude/context/memory/issues.md
  • 做出的决策 -> .claude/context/memory/decisions.md

假设中断:如果不在内存中,就没有发生。