Testing con IA: El Nuevo Paradigma
Una de las mejores aplicaciones de Claude Code es la generación de tests. Claude entiende tu código y puede crear tests completos, incluyendo edge cases que podrías olvidar.
Si quieres dominar esta y otras capacidades, el curso de Claude Code te enseña todo lo necesario.
Por Qué Usar Claude Code para Testing
- Velocidad: Tests en minutos, no horas
- Cobertura: Claude encuentra edge cases
- Consistencia: Sigue tus patrones existentes
- Aprendizaje: Ves buenos ejemplos de tests
Generar Tests Unitarios
Ejemplo con Jest (JavaScript)
Tienes este código:
// utils/calculator.js
export function add(a, b) {
return a + b;
}
export function divide(a, b) {
if (b === 0) throw new Error('Division by zero');
return a / b;
}En Claude Code:
Genera tests unitarios con Jest para @utils/calculator.js
Incluye casos de éxito y edge cases.Claude genera:
// utils/calculator.test.js
import { add, divide } from './calculator';
describe('Calculator', () => {
describe('add', () => {
it('should add two positive numbers', () => {
expect(add(2, 3)).toBe(5);
});
it('should handle negative numbers', () => {
expect(add(-1, 5)).toBe(4);
});
it('should handle zero', () => {
expect(add(0, 0)).toBe(0);
});
});
describe('divide', () => {
it('should divide two numbers', () => {
expect(divide(10, 2)).toBe(5);
});
it('should handle decimal results', () => {
expect(divide(5, 2)).toBe(2.5);
});
it('should throw error on division by zero', () => {
expect(() => divide(10, 0)).toThrow('Division by zero');
});
});
});Tests con Pytest (Python)
En Claude Code:
Genera tests con Pytest para @services/user_service.py
Usa fixtures y parametrize para edge cases.Claude genera:
import pytest
from services.user_service import UserService
@pytest.fixture
def user_service():
return UserService()
@pytest.fixture
def sample_user():
return {"name": "John", "email": "john@example.com"}
class TestUserService:
def test_create_user_success(self, user_service, sample_user):
result = user_service.create(sample_user)
assert result.name == "John"
assert result.email == "john@example.com"
@pytest.mark.parametrize("invalid_email", [
"invalid",
"@nodomain",
"spaces in@email.com",
])
def test_create_user_invalid_email(self, user_service, invalid_email):
with pytest.raises(ValueError):
user_service.create({"name": "Test", "email": invalid_email})
def test_create_user_duplicate_email(self, user_service, sample_user):
user_service.create(sample_user)
with pytest.raises(DuplicateError):
user_service.create(sample_user)Tests de Integración
En Claude Code:
Genera tests de integración para la API REST en @routes/api.js
Usa supertest y mockea la base de datos.Tests E2E con Playwright
Genera tests E2E con Playwright para el flujo de login.
El usuario debe poder:
1. Ir a /login
2. Ingresar credenciales
3. Ver el dashboardClaude genera:
import { test, expect } from '@playwright/test';
test.describe('Login Flow', () => {
test('should login successfully with valid credentials', async ({ page }) => {
await page.goto('/login');
await page.fill('[data-testid="email"]', 'user@example.com');
await page.fill('[data-testid="password"]', 'password123');
await page.click('[data-testid="login-button"]');
await expect(page).toHaveURL('/dashboard');
await expect(page.locator('h1')).toContainText('Welcome');
});
test('should show error with invalid credentials', async ({ page }) => {
await page.goto('/login');
await page.fill('[data-testid="email"]', 'wrong@example.com');
await page.fill('[data-testid="password"]', 'wrongpassword');
await page.click('[data-testid="login-button"]');
await expect(page.locator('.error-message')).toBeVisible();
});
});Prompts Efectivos para Tests
Conocer los comandos esenciales de Claude Code te ayudará a escribir mejores prompts.
Para Cobertura Completa
Genera tests para @archivo.js con:
- Happy path
- Edge cases (null, undefined, empty)
- Error handling
- Boundary conditions
- Async scenarios si aplicaPara Seguir Patrones Existentes
Mira los tests en @tests/ y genera tests para
@nuevo_modulo.js siguiendo el mismo estilo y estructura.Mejorando Tests Existentes
Revisa @tests/user.test.js y sugiere:
1. Tests que faltan
2. Edge cases no cubiertos
3. Mejoras en la estructuraMocking con Claude Code
El servicio en @services/payment.js usa Stripe.
Genera tests que mockeen las llamadas a Stripe
usando jest.mock().Tips para Mejores Tests
- Sé específico: Menciona el framework de testing
- Da contexto: Explica qué hace el código
- Pide edge cases: Claude los encuentra si se lo pides
- Revisa: Siempre ejecuta los tests generados
Workflow Recomendado
- Escribe el código de producción
- Pide a Claude Code que genere tests
- Ejecuta los tests:
/run npm test - Si fallan, pide a Claude que los corrija
- Itera hasta tener buena cobertura
Conclusión
Claude Code puede multiplicar tu productividad en testing. No reemplaza entender testing, pero automatiza la parte repetitiva.
Empieza generando tests para código existente sin tests. Verás cómo mejora tu cobertura rápidamente. Si eres principiante, comienza con la guía de Claude Code para principiantes. Y para desarrollo web con tests, revisa nuestra guía de Claude Code para desarrollo web. Todo esto en el curso de Claude Code.