Guía de prueba
omegaUp utiliza múltiples marcos de prueba para garantizar la calidad del código en diferentes capas.
Pila de pruebas
| Capa | Marco | Ubicación |
|---|---|---|
| Pruebas unitarias de PHP | Unidad PHP | frontend/tests/controllers/ |
| Pruebas de TypeScript/Vue | Broma | frontend/www/js/ |
| Pruebas E2E | Ciprés | cypress/e2e/ |
| Pruebas de Python | pytest | stuff/ |
Pruebas unitarias de PHP
Ejecutando todas las pruebas de PHP
./stuff/runtests.sh
Ubicación: Dentro del contenedor Docker
Ejecutando un archivo de prueba específico
./stuff/run-php-tests.sh frontend/tests/controllers/MyControllerTest.php
Requisitos de prueba
- Todas las pruebas deben pasar el 100% antes de comprometerse.
- La nueva funcionalidad requiere pruebas nuevas/modificadas
- Pruebas ubicadas en
frontend/tests/controllers/
Pruebas de TypeScript/Vue
Ejecución de pruebas de Vue (modo de vigilancia)
yarn run test:watch
Ubicación: Dentro del contenedor Docker
Ejecutando un archivo de prueba específico
./node_modules/.bin/jest frontend/www/js/omegaup/components/MyComponent.test.ts
Estructura de prueba
Verificación de pruebas de componentes de Vue: - Visibilidad de los componentes - Emisión de eventos - Comportamiento esperado - Props y estado
Pruebas de ciprés E2E
Apertura del corredor de prueba de Cypress
npx cypress open
Requisitos previos: - Node.js instalado - NPM instalado -libasound2 (Linux)
Ubicación: contenedor Docker exterior
Ejecución de pruebas de Cypress
yarn test:e2e
Archivos de prueba
Pruebas E2E ubicadas en cypress/e2e/:
- login.spec.ts
-problem-creation.spec.ts
-contest-management.spec.ts
- Y más...
Pruebas de Python
Las pruebas de Python utilizan pytest y se encuentran en el directorio stuff/.
Cobertura de prueba
Usamos Codecov para medir la cobertura:
- PHP: Cobertura medida ✅
- TypeScript: Cobertura medida ✅
- Cypress: Cobertura aún no medida ⚠️
Mejores prácticas
Escriba las pruebas primero
Cuando sea posible, escriba pruebas antes de la implementación (TDD).
Probar rutas críticas
Centrarse en: - Flujos de autenticación de usuarios. - Presentación y evaluación de problemas. - Gestión del concurso - Puntos finales API
Mantenga las pruebas rápidas
- Las pruebas unitarias deben ser rápidas (< 1 segundo)
- Las pruebas E2E pueden ser más lentas pero deben completarse en un tiempo razonable
Prueba de aislamiento
- Cada prueba debe ser independiente.
- Limpiar datos de prueba después de las pruebas.
- Utilice dispositivos de prueba para obtener datos consistentes
Documentación relacionada
- Pautas de codificación - Estándares de código
- Comandos útiles - Comandos de prueba
- Guía de Cypress - Guía detallada de Cypress