🧪 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)
# Ejecutar todos los tests con cobertura
make test
# Instalar dependencias de desarrollo
make install-dev
Opción 2: Usando pytest directamente
# 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
# 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)
- Páginas web: Index, Study, Practice, Exam
- API endpoints: /api/questions con diferentes modos
- Parser de markdown: Preguntas, opciones, respuestas correctas
- Imágenes: Soporte local y remoto
- Archivos estáticos: CSS, JS, favicon
- Validación de datos: Estructura de preguntas
- Manejo de errores: Parámetros inválidos
- 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
- Crear archivo
test_[funcionalidad].pyen el directoriotests/ - Usar las fixtures de
conftest.py(client, app) - Seguir el patrón de naming:
test_[descripcion]() - Documentar en este README
Convenciones
- Naming:
test_[funcionalidad]_[caso]() - Assertions: Usar
assertcon mensajes descriptivos - Fixtures: Reutilizar
clientyappde conftest.py - Docstrings: Describir qué verifica cada test
Ejemplo de Test
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
- Leer el mensaje de error completo
- Ejecutar test individual:
pytest tests/test_app.py::test_specific_function -v - Verificar fixtures: Asegurar que
conftest.pyesté correcto - Revisar imports: Verificar que los módulos se importen correctamente
Comandos Útiles
# 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.