Testing no es opcional. Código sin tests = código sin confianza.
Pero escribir 10,000 tests es insano. Necesitas estrategia.
Pirámide de testing (de abajo a arriba):
1. Unit tests (70%): funciones individuales. Rápidos, múltiples. - Herramientas: Jest, Vitest - Tiempo: <1ms por test - Ejemplo: testea función que suma. 10 casos, 10ms totales.
2. Integration tests (20%): múltiples componentes. APIs con BD simulada. - Herramientas: Jest + React Testing Library - Tiempo: 50-200ms por test - Ejemplo: testea flujo login: input → submit → API → redirect.
3. E2E tests (10%): usuario real en navegador real. Lentos, críticos. - Herramientas: Playwright, Cypress - Tiempo: 5-10s por test - Ejemplo: usuario navega a landing, hace signup, verifica email.
Coverage goal: 80% es realista. 100% es paranoia. 20% = demasiado poco.
Coverage no es todo. 100% coverage puede significar tests de basura. Testea comportamientos reales: - Happy path: usuario hace todo bien - Edge cases: valores límite, strings vacíos - Error states: API falla, usuario desconectado - Accesibilidad: puedo navegar con teclado
Herramientas imprescindibles:
Jest: runner de tests, assertions, mocking.
React Testing Library: no testees detalles, testea comportamiento. getByRole, getByLabelText.
Vitest: Jest pero más rápido. Drop-in replacement.
Coverage tools: c8, nyc. Visualiza qué código NO está testeado.
Mocking: - jest.mock(): simula módulos - MSW (Mock Service Worker): intercepta requests de red - Fixtures: datos de prueba
Pipeline:
Commit → Pre-commit hook (ESLint) → Unit tests (30s) → Integration tests (2min) → E2E tests (5min) → Deploy
Red flags: - "No tengo tiempo para tests": correcto hasta que refactorizas y todo se rompe - "Tests son para startups": en empresas grandes, tests ahorran meses - "Testeo manualmente": escalable hasta 50 features. Luego imposible.
En Leon Carpe Studios escribimos tests mientras escribimos código. La disciplina paga.