testing - reporter - ¿Cómo leo un informe de cobertura de Estambul?
test coverage istanbul (2)
Hay una serie de criterios de cobertura, los principales son:
- Cobertura de función ¿Se ha llamado a cada función (o subrutina) en el programa?
- Cobertura del estado de cuenta ¿Se ha ejecutado cada declaración en el programa?
- Cobertura de la sucursal ¿Se ha ejecutado cada bifurcación (también llamada DD-path) de cada estructura de control (como en las sentencias if y case)? Por ejemplo, dado un enunciado if, ¿se han ejecutado las ramas verdadera y falsa? Otra forma de decir esto es: ¿se han ejecutado todos los bordes del programa?
- ¿La cobertura de línea tiene ejecutada cada línea ejecutable en el archivo fuente?
Para cada caso, el porcentaje representa código ejecutado vs código no ejecutado , que es igual a cada fracción en formato de porcentaje (por ejemplo: 50% de ramas, 1/2).
En el informe de archivo:
-
''E''
significa ''else ruta no tomada'', lo que significa que para la sentencia if / else marcada, la ruta ''if'' ha sido probada pero no el ''else''. -
''I''
significa ''si no se toma el camino'', que es el caso opuesto: el ''si'' no se ha probado. - El
xN
en la columna de la izquierda es la cantidad de veces que se ejecutó esa línea. - Las líneas no ejecutadas, o fragmentos de código, se resaltarán en rojo.
Esto se ha verificado para Estambul v0.4.0, no estoy seguro de si esto todavía se aplica a las versiones posteriores, pero como esa biblioteca se basa en sólidos principios teóricos, el comportamiento no debería cambiar demasiado para las versiones más recientes.
También proporciona algunos códigos de color -
Rosa : declaraciones no cubiertas.
Naranja : funciones no cubiertas.
Amarillo : ramas no cubiertas.
Los documentos completos de Estambul aquí:
https://gotwarlost.github.io/istanbul/public/apidocs/index.html
Para una teoría más profunda sobre la cobertura del código:
https://en.wikipedia.org/wiki/Code_coverage
¡Espero eso ayude!
Siempre he usado Jasmine para mis pruebas unitarias, pero recientemente comencé a usar Estambul para darme informes de cobertura de código. Quiero decir que entiendo lo esencial de lo que intentan decirme, pero realmente no sé qué representa cada uno de estos porcentajes (Stmts, Branches, Funcs, Lines). Hasta ahora, Google no ha podido encontrar una explicación / recurso sólido.
Pregunta : Como dije, entendí lo esencial, pero ¿alguien puede publicar una explicación adecuada o un enlace a una explicación adecuada?
Pregunta Terciaria : ¿Hay alguna manera de identificar qué partes específicas de su código no están cubiertas? Hasta ahora sin realmente asimilar este informe, básicamente estoy adivinando.
-------------------|-----------|-----------|-----------|-----------|
File | % Stmts |% Branches | % Funcs | % Lines |
-------------------|-----------|-----------|-----------|-----------|
controllers/ | 88.1 | 77.78 | 78.57 | 88.1 |
dashboard.js | 88.1 | 77.78 | 78.57 | 88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files | 88.1 | 77.78 | 78.57 | 88.1 |
-------------------|-----------|-----------|-----------|-----------|
La ejecución de Estambul también debe producir un archivo HTML para el informe (debe estar en la carpeta de cobertura). Este HTML debería proporcionarle información detallada cuando hace clic en archivos / carpetas.
El porcentaje de funciones cubiertas se calcula por el número de funciones que se llamaron durante las pruebas, dividido por el número total de funciones. Lo mismo ocurre con las líneas y los enunciados (que generalmente estarán cerca el uno del otro a menos que tenga declaraciones muy largas). Las ramas significan puntos de decisión como bloques if-else
. Por ejemplo, supongamos que su código solo contiene una instrucción if-else
, y sus pruebas solo pasan por la parte if
pero no por la parte else
, entonces su porcentaje de branches debe ser del 50%.
Espero que eso aclare las cosas.