Sistema NEXUS v3.4 migrado con: Estructura principal: - core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles) - core/catalog: Catalogo de funcionalidades reutilizables - shared/knowledge-base: Base de conocimiento compartida - devtools/scripts: Herramientas de desarrollo - control-plane/registries: Control de servicios y CI/CD - orchestration/: Configuracion de orquestacion de agentes Proyectos incluidos (11): - gamilit (submodule -> GitHub) - trading-platform (OrbiquanTIA) - erp-suite con 5 verticales: - erp-core, construccion, vidrio-templado - mecanicas-diesel, retail, clinicas - betting-analytics - inmobiliaria-analytics - platform_marketing_content - pos-micro, erp-basico Configuracion: - .gitignore completo para Node.js/Python/Docker - gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git) - Sistema de puertos estandarizado (3005-3199) Generated with NEXUS v3.4 Migration System EPIC-010: Configuracion Git y Repositorios
6.2 KiB
6.2 KiB
ADR-003: Estrategia de Testing
Estado: Aceptado Fecha: 2025-12-06 Decisores: Tech Lead, Arquitecto Relacionado: ADR-001, ADR-002
Contexto
OrbiQuant IA maneja datos financieros críticos y predicciones de ML que afectan decisiones de inversión. Necesitamos:
- Confiabilidad: Trading con dinero real requiere alta confianza en el código
- Regression Prevention: Nuevas features no deben romper funcionalidades existentes
- Velocidad de Desarrollo: Tests rápidos para no frenar el MVP (8 semanas)
- Coverage Meaningful: No solo alcanzar %, sino testear lógica crítica
- Múltiples Tecnologías: Frontend (React), Backend (Express), ML (Python)
El equipo tiene experiencia con Jest, Vitest y Pytest en proyectos previos.
Decisión
Testing Tools por Aplicación
| App | Framework | Justificación |
|---|---|---|
| Frontend | Vitest + React Testing Library | Nativo para Vite, más rápido que Jest |
| Backend | Jest + Supertest | Estándar de Node.js, buena integración |
| ML Engine | Pytest + TestClient | Estándar Python, fixtures poderosos |
| E2E | Playwright | Cross-browser, auto-wait, debugging |
Coverage Targets
frontend:
statements: 70%
branches: 65%
functions: 70%
lines: 70%
backend:
statements: 80%
branches: 75%
functions: 80%
lines: 80%
ml-engine:
statements: 75%
branches: 70%
functions: 75%
lines: 75%
Testing Pyramid
E2E (5%)
──────────────
Integration (25%)
─────────────────────
Unit Tests (70%)
──────────────────────────
Estructura de Tests
apps/frontend/
src/
components/
Button/
Button.tsx
Button.test.tsx # Co-located unit tests
__tests__/
integration/ # Integration tests
auth-flow.test.tsx
apps/backend/
src/
routes/
auth.routes.ts
auth.routes.test.ts # Co-located tests
__tests__/
integration/
api.test.ts
apps/ml-engine/
tests/
unit/ # Unit tests
integration/ # Integration tests
conftest.py # Pytest fixtures
tests/e2e/ # E2E en root del monorepo
auth.spec.ts
trading.spec.ts
Test Scripts
{
"scripts": {
"test": "npm run test --workspaces",
"test:unit": "npm run test:unit --workspaces",
"test:integration": "npm run test:integration --workspaces",
"test:e2e": "playwright test",
"test:coverage": "npm run test:coverage --workspaces",
"test:watch": "npm run test:watch -w apps/frontend"
}
}
Consecuencias
Positivas
- Fast Feedback: Vitest en frontend es ~10x más rápido que Jest
- Type Safety: Tests en TypeScript previenen errores de tipos
- Confidence: 80% coverage en backend protege lógica crítica
- Developer Experience: Watch mode + HMR para tests instantáneos
- CI Pipeline: Tests paralelos por workspace
- Debugging: Playwright trace viewer para E2E failures
- Consistent Tools: Misma API de assertions (expect) en todos los tests
Negativas
- Múltiples Frameworks: Equipo debe conocer Vitest, Jest y Pytest
- CI Time: Tests completos pueden tardar 5-10 min
- Flaky E2E: Playwright tests pueden fallar por timing issues
- Maintenance: Tests también requieren refactoring
- Learning Curve: React Testing Library requiere pensar en "user behavior"
Riesgos y Mitigaciones
| Riesgo | Mitigación |
|---|---|
| Tests lentos en CI | Paralelización + caching de dependencias |
| Flaky E2E tests | Retry logic (3 intentos) + auto-wait de Playwright |
| Low coverage | Pre-commit hook que bloquea < 70% |
| Mocks complejos | Usar MSW para mock de API requests |
Alternativas Consideradas
1. Jest para Todo (Frontend + Backend)
- Pros: Una sola herramienta, configuración compartida
- Contras: Más lento en frontend, no nativo para Vite
- Decisión: ❌ Descartada - Vitest es superior para proyectos Vite
2. Cypress para E2E
- Pros: Developer-friendly, time-travel debugging
- Contras: Solo Chrome, más lento que Playwright
- Decisión: ❌ Descartada - Playwright es más rápido y multi-browser
3. Coverage al 100%
- Pros: Máxima confianza
- Contras: Tiempo de desarrollo excesivo, diminishing returns
- Decisión: ❌ Descartada - 70-80% es balance óptimo para MVP
4. Solo E2E Tests (Testing Trophy)
- Pros: Tests que cubren flujos reales
- Contras: Lentos, difíciles de debuggear, frágiles
- Decisión: ❌ Descartada - Necesitamos pirámide balanceada
5. TDD Estricto
- Pros: Diseño guiado por tests
- Contras: Ralentiza MVP, no todo el equipo tiene experiencia
- Decisión: ❌ Descartada - TDD opcional, no obligatorio
Testing de Componentes Críticos
Backend
// ✅ MUST TEST
- Authentication & Authorization
- Payment processing (Stripe)
- ML predictions API
- Database transactions
- Rate limiting
// ⚠️ SHOULD TEST
- Validation middleware
- Error handlers
- Email/SMS services
// ❌ SKIP
- Trivial getters/setters
- Type definitions
Frontend
// ✅ MUST TEST
- Forms con validación
- Trading dashboard calculations
- Chart data transformations
- Authentication flows
// ⚠️ SHOULD TEST
- Hooks personalizados
- Zustand stores
- Utilities/helpers
// ❌ SKIP
- Componentes puramente visuales sin lógica
- Wrappers triviales
ML Engine
# ✅ MUST TEST
- Model predictions
- Feature engineering
- Data preprocessing
- Model loading/validation
# ⚠️ SHOULD TEST
- API endpoints
- Data validation
- Cache logic
# ❌ SKIP
- Configuración constants
- Type hints