- Objectivo: Testear piezas pequeñas del app
- Mock: Todas las dependencias externas, aprovechar el mecanismo de DI que usamos en la arquitectura, si estamos probando un controller -> mock del servicio (dependencia); si estamos probando un servicio -> mock repositories y servicios inyectados. Todo se traduce en hacer mock de cualquier dependencia inyectada.
always mock your dependcies (db functions, services, helpers, etc)
- Objetivo: Probar la interacción entre múltiples componentes del sistema
- Alcance: Múltiples capas pero sin servicios externos
- Base de datos: Usa una base de datos de test real
- Mock: Solo servicios externos (email, S3, etc.)
- Objetivo: Probar el sistema completo en un entorno real
- Alcance: Todo el sistema incluyendo servicios externos
- Base de datos: Usa una base de datos de staging
- Mock: Nada, usa servicios reales
-
Alcance:
- Unitarios: Una función/método aislado
- Integración: Múltiples componentes internos
- E2E: Sistema completo con interfaces reales
-
Velocidad:
- Unitarios: Muy rápidos
- Integración: Moderadamente rápidos
- E2E: Lentos
-
Mantenimiento:
- Unitarios: Fácil mantenimiento
- Integración: Mantenimiento moderado
- E2E: Más difíciles de mantener
-
Confiabilidad:
- Unitarios: Alta para lógica específica
- Integración: Alta para flujos internos
- E2E: Alta para flujos completos de usuario
-
Pirámide de Testing:
- 70% Tests Unitarios
- 20% Tests de Integración
- 10% Tests E2E
-
Priorización:
- Comenzar con tests unitarios de Services
- Agregar tests de integración para flujos críticos
- Implementar E2E para happy paths principales
-
Automatización:
- Configurar CI/CD para ejecutar todos los niveles
- Tests unitarios y de integración en cada PR
- E2E en deploys a staging
¿Que testear en cada capa?
- Tests: Test Unitarios, Integración y e2e
- Contienen la lógica del negocio principal
- Son los más importantes de testear
- Mayor retorno de inversión en testing
- Mas fáciles de aislar con mocks
- Tests: Integración y e2e
- Suelen tener muy poca lógica
- Tests: Integración
- Jest (todos los niveles)
- Supertest (Integración)
- playwright (e2e)