Generación de Tests con IA
Crea tests unitarios completos en segundos con inteligencia artificial
Por Qué Generar Tests con IA
Escribir tests es tedioso pero esencial. La IA puede generar suites completas de tests en segundos, incluyendo casos normales, edge cases y manejo de errores. Esto te ahorra horas de trabajo y mejora la cobertura de tu código.
Tipos de Tests que la IA Puede Generar
1. Tests unitarios
"Genera tests unitarios con Jest para esta función:
[código]
Incluye:
- Casos normales (happy path)
- Edge cases (empty array, null, undefined)
- Casos de error (tipos incorrectos)
- Mock de dependencias externas"
2. Tests de integración
"Crea tests de integración para este endpoint Express:
[código]
Usa supertest. Mockea la base de datos con jest.mock().
Prueba: GET /users, POST /users, PUT /users/:id, DELETE /users/:id"
3. Tests E2E
"Escribe tests E2E con Playwright para este flujo:
1. Usuario va a /login
2. Introduce email y password
3. Click en 'Iniciar sesión'
4. Verifica que redirige a /dashboard
5. Verifica que muestra el nombre del usuario"
Prompt Maestro para Tests
"Genera tests completos para esta función [lenguaje/framework]:
[código]
Requisitos:
- Framework: [Jest/Vitest/Pytest/JUnit]
- Cobertura objetivo: 100%
- Incluye tests para:
* Casos normales con datos válidos
* Edge cases: null, undefined, [], {}, 0, ""
* Tipos de datos incorrectos
* Límites (máximo, mínimo)
* Errores esperados y su manejo
- Usa describe/it con nombres descriptivos
- Mockea: [lista de dependencias]
- Incluye assertions específicas (no solo toBeTruthy)"
Ejemplo: Antes y Después
Función a testear
function calculateDiscount(price, userType, isVip) {
if (price <= 0) throw new Error('Price must be positive');
if (!userType) throw new Error('User type required');
let discount = 0;
if (userType === 'premium') discount = 0.1;
if (isVip) discount += 0.05;
if (price > 1000) discount += 0.02;
return price * (1 - discount);
}
Tests generados por IA
describe('calculateDiscount', () => {
describe('valid inputs', () => {
it('returns full price for regular user', () => {
expect(calculateDiscount(100, 'regular', false)).toBe(100);
});
it('applies 10% discount for premium', () => {
expect(calculateDiscount(100, 'premium', false)).toBe(90);
});
it('adds 5% VIP discount', () => {
expect(calculateDiscount(100, 'premium', true)).toBe(85);
});
it('adds 2% for orders over 1000', () => {
expect(calculateDiscount(1000, 'premium', false)).toBe(880);
});
});
describe('edge cases', () => {
it('throws for price <= 0', () => {
expect(() => calculateDiscount(0, 'regular', false))
.toThrow('Price must be positive');
});
it('throws for missing userType', () => {
expect(() => calculateDiscount(100, null, false))
.toThrow('User type required');
});
});
});
Tips para Mejores Tests con IA
- Proporciona la función completa: No solo la firma
- Especifica el framework: Jest, Vitest, Pytest, etc.
- Pide edge cases explícitamente: La IA los olvida si no se lo pides
- Indica qué mockear: DB, APIs externas, filesystem
- Pide nombres descriptivos: "should return X when Y"
- Revisa siempre: La IA puede generar tests incorrectos