## Directivas SIMCO v3.7.0 - Estandarizacion de Documentacion (7) - SIMCO-DOCUMENTACION-PROYECTO.md - SIMCO-NOMENCLATURA.md - SIMCO-ESTRUCTURA-DOCS.md - SIMCO-INVENTARIOS.md - SIMCO-TESTING.md - SIMCO-MIGRACIONES-BD.md - SIMCO-INTEGRACIONES-EXTERNAS.md ## Directivas SIMCO v3.8.0 - Mantenimiento de Documentacion (2) - SIMCO-MANTENIMIENTO-DOCUMENTACION.md - SIMCO-SINCRONIZACION-BD.md ## Templates (4) - TEMPLATE-INVENTARIO-PROYECTO.md - TEMPLATE-INTEGRACION-EXTERNA.md - TEMPLATE-MODULO-ESTANDAR.md - TEMPLATE-DEPRECACION.md ## Checklists (6) - CHECKLIST-DOCUMENTACION-PROYECTO.md - CHECKLIST-INVENTARIOS.md - CHECKLIST-NOMENCLATURA.md - CHECKLIST-MANTENIMIENTO-DOCS.md - CHECKLIST-SINCRONIZACION-BD.md - _MAP.md ## Perfil de Agente (1) - PERFIL-DOCUMENTATION-MAINTAINER.md ## Indices - INDICE-DIRECTIVAS-WORKSPACE.yml actualizado a v3.8.0 ## Submodulos actualizados (14) - gamilit, erp-core, michangarrito, template-saas - erp-suite, erp-construccion, erp-clinicas - erp-mecanicas-diesel, erp-retail, erp-vidrio-templado - trading-platform, betting-analytics - inmobiliaria-analytics, platform_marketing_content Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.7 KiB
7.7 KiB
SIMCO-TESTING
Version: 1.0.0 Tipo: Directiva Operacional Prioridad: P0 Alias: @TESTING Creado: 2026-01-10 Depende de: SIMCO-BACKEND.md, SIMCO-FRONTEND.md
1. Proposito
Establecer estandares minimos de testing para todos los proyectos, definiendo cobertura requerida, tipos de tests y convenciones de nomenclatura.
2. Principios de Testing
2.1 Testing como Requisito
- Todo codigo nuevo DEBE incluir tests
- Tests antes de PR (no despues)
- Cobertura minima es un gate de CI/CD
2.2 Piramide de Testing
╱╲
╱ ╲
╱E2E ╲ (pocos, lentos, costosos)
╱──────╲
╱Integr. ╲ (algunos, moderados)
╱──────────╲
╱ Unit ╲ (muchos, rapidos, baratos)
╱──────────────╲
2.3 Test-Driven Approach
- Escribir test que falla
- Implementar codigo minimo
- Refactorizar
- Repetir
3. Cobertura Minima por Tipo
3.1 Backend
| Tipo | Cobertura Minima | Herramienta |
|---|---|---|
| Unit | 70% | Jest |
| Integration | 50% | Jest + Supertest |
| E2E | 30% | Jest + Supertest |
3.2 Frontend
| Tipo | Cobertura Minima | Herramienta |
|---|---|---|
| Components | 60% | Jest + Testing Library |
| Hooks | 70% | Jest |
| E2E | 20% | Playwright/Cypress |
3.3 Database
| Tipo | Cobertura | Herramienta |
|---|---|---|
| Migrations | 100% | Script validacion |
| Rollback | 100% | Script validacion |
| Functions | 80% | pgTAP |
4. Tipos de Tests Requeridos
4.1 Unit Tests
Proposito: Probar funciones/metodos aislados
Caracteristicas:
- Sin dependencias externas
- Mocks para servicios
- Rapidos (<100ms por test)
// Ejemplo: user.service.spec.ts
describe('UserService', () => {
describe('create', () => {
it('should create a user with valid data', async () => {
// Arrange
const dto = { email: 'test@test.com', password: '123456' };
// Act
const result = await service.create(dto);
// Assert
expect(result).toBeDefined();
expect(result.email).toBe(dto.email);
});
});
});
4.2 Integration Tests
Proposito: Probar interaccion entre componentes
Caracteristicas:
- Base de datos de prueba
- Servicios reales (no mocks)
- Moderadamente rapidos
// Ejemplo: auth.integration.spec.ts
describe('Auth Integration', () => {
beforeAll(async () => {
await setupTestDatabase();
});
it('should login and return valid token', async () => {
const response = await request(app)
.post('/api/v1/auth/login')
.send({ email: 'test@test.com', password: '123456' });
expect(response.status).toBe(200);
expect(response.body.token).toBeDefined();
});
});
4.3 E2E Tests
Proposito: Probar flujos completos de usuario
Caracteristicas:
- Ambiente completo
- Desde UI hasta DB
- Lentos pero completos
// Ejemplo: login.e2e.spec.ts
describe('Login Flow', () => {
it('should allow user to login', async () => {
await page.goto('/login');
await page.fill('[data-testid="email"]', 'user@test.com');
await page.fill('[data-testid="password"]', '123456');
await page.click('[data-testid="submit"]');
await expect(page).toHaveURL('/dashboard');
});
});
5. Nomenclatura de Archivos de Test
5.1 Patrones por Tipo
| Tipo | Patron | Ejemplo |
|---|---|---|
| Unit | {nombre}.spec.ts |
user.service.spec.ts |
| Integration | {nombre}.integration.spec.ts |
auth.integration.spec.ts |
| E2E | {nombre}.e2e.spec.ts |
login.e2e.spec.ts |
5.2 Ubicacion
src/
├── modules/
│ └── auth/
│ ├── auth.service.ts
│ ├── auth.service.spec.ts # Unit test junto al archivo
│ └── __tests__/
│ └── auth.integration.spec.ts
test/
└── e2e/
└── auth/
└── login.e2e.spec.ts
6. Estructura de Carpetas de Test
6.1 Backend (NestJS)
apps/backend/
├── src/
│ └── modules/
│ └── {modulo}/
│ ├── {modulo}.service.spec.ts
│ ├── {modulo}.controller.spec.ts
│ └── __tests__/
│ ├── {modulo}.integration.spec.ts
│ └── fixtures/
├── test/
│ ├── e2e/
│ │ └── {modulo}/
│ │ └── {feature}.e2e.spec.ts
│ ├── fixtures/
│ └── setup.ts
└── jest.config.js
6.2 Frontend (React)
apps/frontend/
├── src/
│ └── components/
│ └── {Component}/
│ ├── {Component}.tsx
│ ├── {Component}.test.tsx
│ └── __tests__/
│ └── integration.test.tsx
├── tests/
│ └── e2e/
│ └── {feature}/
│ └── {scenario}.spec.ts
└── playwright.config.ts
7. Comandos de Ejecucion
7.1 Backend
# Unit tests
npm run test
# Unit tests con cobertura
npm run test:cov
# Integration tests
npm run test:integration
# E2E tests
npm run test:e2e
# Watch mode
npm run test:watch
7.2 Frontend
# Component tests
npm run test
# Cobertura
npm run test:coverage
# E2E con Playwright
npm run test:e2e
# E2E con UI
npm run test:e2e:ui
7.3 Scripts en package.json
{
"scripts": {
"test": "jest",
"test:cov": "jest --coverage",
"test:watch": "jest --watch",
"test:integration": "jest --config jest.integration.config.js",
"test:e2e": "jest --config jest.e2e.config.js"
}
}
8. Monitoreo Basico
8.1 Metricas de Testing
| Metrica | Descripcion | Umbral |
|---|---|---|
| Coverage % | Porcentaje de lineas cubiertas | >70% |
| Test Pass Rate | % de tests pasando | 100% |
| Test Duration | Tiempo total de ejecucion | <5min CI |
| Flaky Tests | Tests inconsistentes | 0 |
8.2 Reportes
# Generar reporte HTML de cobertura
npm run test:cov -- --coverageReporters=html
# Ubicacion: coverage/lcov-report/index.html
8.3 CI/CD Integration
# .github/workflows/test.yml
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: npm run test:cov
- name: Check coverage threshold
run: |
coverage=$(cat coverage/coverage-summary.json | jq '.total.lines.pct')
if (( $(echo "$coverage < 70" | bc -l) )); then
echo "Coverage $coverage% is below 70%"
exit 1
fi
9. Integracion con CI/CD
9.1 Gates de Calidad
| Gate | Descripcion | Bloquea PR |
|---|---|---|
| Tests Pass | Todos los tests pasan | SI |
| Coverage Min | Cobertura >= umbral | SI |
| No New Flaky | Sin tests flaky nuevos | SI |
| Performance | Tiempo < limite | NO |
9.2 Pre-commit Hooks
# .husky/pre-commit
npm run test:staged
npm run lint-staged
10. Anti-patrones a Evitar
| Anti-patron | Problema | Solucion |
|---|---|---|
| Tests sin asserts | No validan nada | Agregar expect() |
| Mocks excesivos | No prueban integracion | Balance unit/integration |
| Tests lentos | Bloquean desarrollo | Optimizar o mover a nightly |
| Datos hardcoded | Fragiles | Usar factories/fixtures |
| Skip tests | Deuda tecnica | Arreglar o eliminar |
11. Referencias
| Directiva | Proposito |
|---|---|
| SIMCO-BACKEND.md | Estructura backend |
| SIMCO-FRONTEND.md | Estructura frontend |
| SIMCO-DEVOPS.md | CI/CD |
Ultima actualizacion: 2026-01-10 Mantenido por: Orchestration Team