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.
GitHub
2
Prueba este MCPPatrocinadoDocumentació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 pruebaboundary-value-example: Proporciona ejemplos de análisis de valores límiteequivalence-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 modelocalculate-discount.json- Lógica de negocio con múltiples parámetrosmulti-range-validation.json- Programación compleja con múltiples rangosjapanese-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
- Haz un fork del repositorio
- Crea tu rama de características (
git checkout -b feature/amazing-feature) - Haz commit de tus cambios (
git commit -m 'Add some amazing feature') - Empuja a la rama (
git push origin feature/amazing-feature) - 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)