# 🧪 Tests del Balotario Licencia A-I Este directorio contiene tests automatizados para verificar el funcionamiento correcto de la aplicación Flask. ## 📁 Archivos de Test ### 🐍 Tests Automatizados con pytest #### `test_app.py` - **Propósito**: Tests completos de la aplicación Flask - **Verifica**: - Páginas web (index, study, practice, exam) - API endpoints (/api/questions) - Estructura de datos de preguntas - Archivos estáticos (CSS, JS, favicon) #### `test_parser.py` - **Propósito**: Tests del parser de markdown - **Verifica**: - Parsing correcto de preguntas, opciones y respuestas - Soporte para imágenes locales y remotas - Estructura de datos válida #### `test_clean_parser.py` - **Propósito**: Tests de limpieza de emojis ✅ - **Verifica**: Eliminación correcta de marcadores visuales #### `conftest.py` - **Propósito**: Configuración global de pytest - **Contiene**: Fixtures para cliente Flask y configuración de tests ## 🚀 Cómo Ejecutar los Tests ### Opción 1: Usando Makefile (Recomendado) ```bash # Ejecutar todos los tests con cobertura make test # Instalar dependencias de desarrollo make install-dev ``` ### Opción 2: Usando pytest directamente ```bash # Activar entorno virtual source venv/bin/activate # Linux/Mac # o venv\Scripts\activate # Windows # Ejecutar todos los tests pytest # Con cobertura detallada pytest --cov=. --cov-report=html --cov-report=term-missing # Ejecutar tests específicos pytest tests/test_app.py pytest tests/test_parser.py ``` ### Ver Reporte de Cobertura ```bash # Abrir reporte HTML (se genera automáticamente) open htmlcov/index.html # Mac xdg-open htmlcov/index.html # Linux start htmlcov/index.html # Windows ``` ## 📊 Cobertura de Tests ### ✅ Funcionalidades Probadas (15 tests) - [x] **Páginas web**: Index, Study, Practice, Exam - [x] **API endpoints**: /api/questions con diferentes modos - [x] **Parser de markdown**: Preguntas, opciones, respuestas correctas - [x] **Imágenes**: Soporte local y remoto - [x] **Archivos estáticos**: CSS, JS, favicon - [x] **Validación de datos**: Estructura de preguntas - [x] **Manejo de errores**: Parámetros inválidos - [x] **Limpieza de emojis**: Eliminación de marcadores ✅ ### 📈 Estadísticas Actuales - **Tests**: 15 pasando ✅ - **Cobertura**: ~67% del código - **Archivos cubiertos**: app.py (82%), config.py (100%) ### 🔄 Posibles Mejoras Futuras - [ ] Tests de JavaScript (frontend) - [ ] Tests de integración completa - [ ] Tests de rendimiento - [ ] Tests de accesibilidad - [ ] Tests de responsive design ## 🛠️ Desarrollo de Tests ### Agregar Nuevos Tests 1. Crear archivo `test_[funcionalidad].py` en el directorio `tests/` 2. Usar las fixtures de `conftest.py` (client, app) 3. Seguir el patrón de naming: `test_[descripcion]()` 4. Documentar en este README ### Convenciones - **Naming**: `test_[funcionalidad]_[caso]()` - **Assertions**: Usar `assert` con mensajes descriptivos - **Fixtures**: Reutilizar `client` y `app` de conftest.py - **Docstrings**: Describir qué verifica cada test ### Ejemplo de Test ```python def test_new_feature(client): """Test that new feature works correctly.""" response = client.get('/new-endpoint') assert response.status_code == 200 assert b'expected content' in response.data ``` ## 🐛 Debugging ### Si un Test Falla 1. **Leer el mensaje de error** completo 2. **Ejecutar test individual**: `pytest tests/test_app.py::test_specific_function -v` 3. **Verificar fixtures**: Asegurar que `conftest.py` esté correcto 4. **Revisar imports**: Verificar que los módulos se importen correctamente ### Comandos Útiles ```bash # Test específico con output detallado pytest tests/test_app.py::test_index_page -v -s # Parar en el primer fallo pytest -x # Mostrar variables locales en fallos pytest --tb=long ``` --- **Nota**: Estos son tests automatizados que se ejecutan con pytest. Proporcionan verificación continua de que la aplicación funciona correctamente.