node.js - Generación de informes de cobertura de código de Estambul para pruebas de jazmín ejecutadas(a través de grunt) en un paquete de browserify en phantomjs
browserify bundle (1)
El título lo dice todo realmente. A pesar de navegar por internet, no he encontrado un solo ejemplo de una solución a este problema.
Aquí hay algunos casi fallos
- https://github.com/amitayd/grunt-browserify-jasmine-node-example - ronco, navegador y jazmín
- https://github.com/gotwarlost/istanbul/issues/59#issuecomment-18799734 - browserify e istanbul
Aquí está mi código en curso https://github.com/wheresrhys/on-guard/tree/browserify (tenga en cuenta que es la rama ''browserify'' - Gruntfile.js es un poco desordenado, pero lo ordenará en breve). Mis investigaciones iniciales con console.log
indican que de alguna manera bundle.src.js
se está cargando en la página, pero cuando se ejecutan (¡y pasan!) El código en bundle.src.js
no se está ejecutando, entonces tengo una sintiendo que podría ser un problema de aliasing ... aunque uno que está limitado a phantomjs ya que cuando abro el specrunner en Chrome el código se está ejecutando.
Estoy usando grunt-browserify
+ browserify-istanbul
+ grunt-contrib-jasmine
+ grunt-template-jasmine-istanbul
como solución. Esta solución también ha excluido bibliotecas de terceros al browserify
archivos fuente mediante browserify
.
Muestre primero el código, lo explicaré más adelante,
grunt.initConfig({
browserify: {
// build specs using browserify
specs: {
src: ["spec/**/*Spec.js"],
dest: "spec/build/specs.js",
options: {
debug: true
}
},
// build source files using browserify and browserify-istanbul
dev: {
options: {
debug: true,
browserifyOptions: {
standalone: ''abc''
},
transform: [[''browserify-istanbul'', {
ignore: [''**/node_modules/**''], // ignore third party libs
defaultIgnore: true
}]]
},
src: [''abc.js''],
dest: ''dist/abc.js''
}
},
connect: {
server: {
options: {
port: 7000
}
}
},
// test using jasmine, generate coverage report using istanbul
jasmine: {
coverage: {
src: [''dist/abc.js''],
options: {
junit: {
path: ''bin/junit''
},
host: ''http://localhost:7000/'',
specs: ''spec/build/specs.js'',
keepRunner: true,
summary: true,
template: require(''grunt-template-jasmine-istanbul''),
templateOptions: {
replace: false, // *** this option is very important
coverage: ''bin/coverage/coverage.json'',
report: [
{
type: ''html'',
options: {
dir: ''spec/coverage/html''
}
}]
}
}
}
}
grunt.registerTask(''specs'', [''browserify:specs'', ''browserify:dev'', ''connect'', ''jasmine'']);
Los pasos para generar el informe de cobertura de Estambul se pueden resumir en tres:
- Código de instrumento
- Ejecutar prueba
- Generar informe de cobertura
En nuestra solución, usamos browerify-istanbul
en el paso 1, grunt-contrib-jasmine
y runt-template-jasmine-istanbul
en los pasos 2 y 3.
browserify-istanbul
le permitirá instrumentar código en el paso de construcción de browserify, de esta manera, podemos ignorar fácilmente libs de terceros. Pero el grunt-template-jasmine-istanbul
volverá a instrumentar el código. Para evitar esto, puede configurar replace
to false
en las opciones.
Refs: