Siempre he usado Jasmine para mis pruebas unitarias, pero recientemente comencé a usar Estambul para darme informes de cobertura de código. Quiero decir, entiendo la esencia de lo que están tratando de decirme, pero no se sabe muy bien lo que cada uno de estos porcentajes representan (Stmts, ramas, Funcs, líneas). Hasta ahora, Google no he podido encontrar una explicación / recurso sólido.
Pregunta : Como dije, lo entiendo, pero ¿alguien puede publicar una explicación adecuada o un enlace a una explicación adecuada?
Pregunta terciaria : ¿Hay alguna forma 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 |
-------------------|-----------|-----------|-----------|-----------|
javascript
testing
jasmine
code-coverage
istanbul
Scott Sword
fuente
fuente
Respuestas:
Existen varios criterios de cobertura, los principales son:
Para cada caso, el porcentaje representa el código ejecutado frente al código no ejecutado , que equivale a cada fracción en formato de porcentaje (por ejemplo: 50% de ramas, 1/2).
En el informe del archivo:
'E'
significa 'otra ruta no tomada', lo que significa que para la instrucción marcada if / else, la ruta 'if' ha sido probada pero no la 'otra'.'I'
significa 'si la ruta no se tomó', que es el caso opuesto: el 'si' no se ha probado.xN
columna de la izquierda es la cantidad de veces que se ejecutó esa línea.Esto se ha verificado para Estambul v0.4.0, no estoy seguro de si esto todavía se aplica a las versiones posteriores, pero dado que la biblioteca se basa en principios teóricos sólidos, el comportamiento no debería cambiar demasiado para las versiones más nuevas.
También proporciona algunos códigos de color:
Rosado : declaraciones no cubiertas.
naranja : funciones no cubiertas.
Amarillo : ramas no cubiertas.
Documentos completos de Estambul aquí:
https://istanbul.js.org
Para una teoría más detallada sobre la cobertura del código:
https://en.wikipedia.org/wiki/Code_coverage
¡Espero eso ayude!
fuente
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 haga 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 las declaraciones (que generalmente estarán cercanas entre sí a menos que tenga declaraciones muy largas). Las ramas significan puntos de decisión como
if-else
bloques. Por ejemplo, digamos que su código solo contiene unaif-else
declaración, y sus pruebas solo pasan por laif
parte pero no por laelse
parte, entonces su porcentaje de ramas debe ser del 50%.Espero que aclare las cosas.
fuente
"test" : "nyc mocha"
enpackage.json
. Mi carpeta de cobertura está en blanco. Pensamientos?"test" : "nyc --reporter=html mocha"
Agregando a las respuestas anteriores
El% de declaraciones se calcula tomando un porcentaje del número de declaraciones cubiertas por su prueba, por ejemplo, 12/18 * 100 = 66.67%. Esto significa que su prueba cubrió solo el 66.67%.
El% Branch también se calcula de la misma manera. Lo mismo para sus% Functions y% lines.
En el directorio raíz de su proyecto, hay una carpeta de cobertura que contiene la salida HTML de su prueba. Haz clic en él y visualízalo en el navegador. Debería ver algo como esto
Imagen que muestra la salida de los resultados de la prueba.
Espero que esto te ayude a entenderlo mejor.
fuente