Cuando coverage no muestra lo esperado, el problema suele estar en la forma de ejecutar las pruebas, la configuración, el entorno virtual o los archivos que se están midiendo.
En este tema vamos a revisar errores frecuentes y una forma ordenada de diagnosticarlos.
El mensaje No data to report aparece cuando coverage no encuentra datos para generar el reporte.
Causa común: ejecutar el reporte sin haber ejecutado antes las pruebas con coverage.
python -m coverage report
Corrección:
python -m coverage run -m pytest
python -m coverage report
Con pytest-cov, ejecuta directamente:
python -m pytest --cov=src --cov-report=term-missing
Este error indica que Python no encuentra el paquete dentro de src.
En Windows PowerShell:
$env:PYTHONPATH="src"
python -m pytest
En Linux o macOS:
PYTHONPATH=src python -m pytest
También puedes instalar el paquete en modo editable si el proyecto está preparado para eso, pero en este curso usamos PYTHONPATH para mantener el foco en cobertura.
Si pytest no reconoce --cov, falta instalar pytest-cov en el entorno virtual activo.
python -m pip install pytest-cov
Luego verifica:
python -m pytest --help
La ayuda debe mostrar opciones como --cov y --cov-report.
Si aparecen archivos dentro de tests, probablemente estás midiendo todo el proyecto en lugar de solo src.
Corrección con pytest-cov:
python -m pytest --cov=src --cov-report=term-missing
Corrección en pyproject.toml:
[tool.coverage.run]
source = ["src"]
Si agregaste pruebas pero el porcentaje no cambia, revisa estas posibilidades:
Ejecuta desde cero:
python -m coverage erase
python -m coverage run -m pytest
python -m coverage report -m
El reporte HTML no se actualiza solo. Debes regenerarlo:
python -m coverage erase
python -m coverage run -m pytest
python -m coverage html
Después actualiza la página del navegador. Si hace falta, cierra y vuelve a abrir htmlcov/index.html.
Si pyproject.toml parece no tener efecto, revisa:
[tool.coverage.run] y [tool.coverage.report].pyproject.toml.Para diagnosticar:
python -m coverage debug config
Si no ves columnas como Branch o BrPart, probablemente no activaste cobertura de ramas.
Con coverage.py:
python -m coverage run --branch -m pytest
python -m coverage report -m
Con pytest-cov:
python -m pytest --cov=src --cov-branch --cov-report=term-missing
O en pyproject.toml:
[tool.coverage.run]
branch = true
Si falla fail_under o --cov-fail-under, primero lee el reporte. No bajes el umbral automáticamente.
Posibles causas:
Este error aparece al ejecutar:
python -m coverage combine
y no hay archivos .coverage.* para combinar.
Corrección: activa parallel = true y ejecuta mediciones que generen archivos separados:
[tool.coverage.run]
parallel = true
Si el reporte marca líneas que no coinciden con el archivo actual:
coverage erase.Los reportes siempre reflejan la medición realizada, no necesariamente el estado que tienes abierto si cambiaste archivos después.
Cuando algo no cierre, ejecuta una secuencia limpia:
python -m coverage erase
python -m coverage run -m pytest
python -m coverage report -m
python -m coverage debug config
Con pytest-cov:
python -m pytest --cov=src --cov-branch --cov-report=term-missing
coverage erase cuando quieras medir desde cero.En este tema repasamos errores frecuentes al medir cobertura y cómo diagnosticarlos. La mayoría se corrige revisando entorno, comandos, configuración y datos acumulados.
En el próximo tema vamos a definir una estrategia práctica para mejorar cobertura sin escribir pruebas frágiles.