Files
driving-academy/tests/README.md
2025-10-26 23:39:49 -05:00

139 lines
3.9 KiB
Markdown

# 🧪 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.