Test Code Generator

Genera código de prueba Vitest a partir de especificaciones JSON utilizando análisis de valores límite y particionamiento de equivalencia.

Documentación

Servidor MCP Test Code Generator

Un servidor MCP que genera código de prueba Vitest basado en análisis de valores límite y particionamiento de equivalencia a partir de especificaciones JSON.

Características

  • Análisis de Valores Límite: Genera automáticamente valores límite y sus valores adyacentes para rangos continuos
  • Soporte de Múltiples Rangos: Maneja rangos válidos discontinuos (p. ej., 0-10, 20-30, 40-50)
  • Particionamiento de Equivalencia: Incluye todos los valores válidos e inválidos de datos categóricos
  • Pruebas por Pares: Genera combinaciones de prueba eficientes usando el método de pares
  • Formato Vitest: Genera código de prueba limpio usando el patrón test.each
  • Guía de Especificación: Proporciona indicaciones para ayudar a crear especificaciones JSON
  • Optimizado para el Idioma: Todo el procesamiento y la salida en inglés para un rendimiento óptimo del LLM

Inicio Rápido

Usando npx (No se requiere instalación)

# Run directly with npx
npx testing-mcp-vitest

# Configure Claude Desktop as shown below

Consulte QUICKSTART.md para obtener instrucciones detalladas de configuración.

Instalación

Usando npx (Recomendado)

npx testing-mcp-vitest

Instalación Local

# Clone repository
git clone <repository-url>
cd test-code-generator-mcp

# Install dependencies
npm install

# Build
npm run build

Uso

Configuración de Claude Desktop

Agregue a su claude_desktop_config.json:

{
  "mcpServers": {
    "test-generator": {
      "command": "npx",
      "args": ["testing-mcp-vitest"]
    }
  }
}

Ubicaciones de archivos de configuración:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Herramientas Disponibles

1. generate-test-code

Genera código de prueba a partir de la especificación JSON.

2. Indicaciones

  • create-test-spec: Explica cómo crear especificaciones de prueba
  • boundary-value-example: Proporciona ejemplos de análisis de valores límite
  • equivalence-class-example: Proporciona ejemplos de particionamiento de equivalencia

Formato de Especificación

Estructura básica con un solo rango:

{
  "type": "model",
  "name": "UserRegistration",
  "columns": [
    {
      "name": "age",
      "type": "number",
      "valueType": "continues",
      "values": {
        "min": 18,
        "max": 120
      }
    },
    {
      "name": "userType",
      "type": "string",
      "valueType": "category",
      "values": {
        "valid": ["admin", "user", "guest"],
        "invalid": ["superuser", "root", ""]
      }
    }
  ]
}

Ejemplo de múltiples rangos:

{
  "name": "workHours",
  "type": "number",
  "valueType": "continues",
  "values": {
    "ranges": [
      { "min": 9, "max": 12 },   // Morning shift
      { "min": 14, "max": 18 }   // Afternoon shift
    ]
  }
}

Ejemplo de Código de Prueba Generado

import { describe, test, expect } from 'vitest';

describe('Tests for UserRegistration', () => {
  // Valid cases
  test.each([
    { inputs: { age: 18, userType: "admin" }, description: 'Combination 1: Valid case' },
    { inputs: { age: 69, userType: "user" }, description: 'Combination 2: Valid case' },
    { inputs: { age: 120, userType: "guest" }, description: 'Combination 3: Valid case' },
    // ... more test cases
  ])('Valid case: $description', ({ inputs }) => {
    // TODO: Import the function or model to test
    // import { UserRegistration } from './path/to/UserRegistration';

    // TODO: Execute the test subject
    // const result = UserRegistration(inputs);

    // TODO: Check expected values
    // expect(result).toBeDefined();
    // expect(result.error).toBeUndefined();
  });

  // Invalid cases
  test.each([
    { inputs: { age: 17, userType: "admin" }, description: 'Combination 4: Invalid case' },
    { inputs: { age: 121, userType: "user" }, description: 'Combination 5: Invalid case' },
    { inputs: { age: 50, userType: "superuser" }, description: 'Combination 6: Invalid case' },
    { inputs: { age: 50, userType: "root" }, description: 'Combination 7: Invalid case' },
    { inputs: { age: 50, userType: "" }, description: 'Combination 8: Invalid case' },
    // ... more test cases
  ])('Invalid case: $description', ({ inputs }) => {
    // TODO: Import the function or model to test
    // import { UserRegistration } from './path/to/UserRegistration';

    // TODO: Verify that an error occurs
    // expect(() => UserRegistration(inputs)).toThrow();
    // or
    // const result = UserRegistration(inputs);
    // expect(result.error).toBeDefined();
  });
});

Características Clave

Cobertura Completa

  • Todos los valores de clase de equivalencia válidos e inválidos se incluyen en los casos de prueba
  • Los valores límite incluyen: min-1, min, min+1, medio, max-1, max, max+1
  • Para múltiples rangos, incluye valores de espacio entre rangos

Combinaciones Eficientes

  • 3 o menos parámetros: genera todas las combinaciones
  • 4 o más parámetros: usa el método de pares para mayor eficiencia

Soporte de Múltiples Rangos

Útil para:

  • Horas de trabajo (9-12, 14-18)
  • Puntuaciones válidas (0-40 aprobado, 60-100 honores)
  • Rangos de temperatura (diferentes rangos válidos para diferentes condiciones)
  • Franjas horarias (sesiones de mañana, tarde y noche)

Ejemplos

Consulte el directorio examples/ para obtener más ejemplos de especificaciones:

  • user-registration.json - Validación básica de modelo
  • calculate-discount.json - Lógica de negocio con múltiples parámetros
  • multi-range-validation.json - Programación compleja con múltiples rangos
  • japanese-postal-code.json - Patrones de validación regional

Desarrollo

# Development mode
npm run dev

# Build
npm run build

# Production mode
npm start

# Debug mode
DEBUG=1 npm start

Publicación en npm

# Build and publish
npm publish

Contribuciones

  1. Haz un fork del repositorio
  2. Crea tu rama de características (git checkout -b feature/amazing-feature)
  3. Haz commit de tus cambios (git commit -m 'Add some amazing feature')
  4. Empuja a la rama (git push origin feature/amazing-feature)
  5. Abre un Pull Request

Licencia

MIT - consulte LICENSE para obtener detalles

Soporte

  • GitHub Issues: [Reportar errores o solicitar funciones](/issues)
  • Discusiones: [Hacer preguntas o compartir ideas](/discussions)