node.js gruntjs phantomjs browserify istanbul

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

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:

  1. Código de instrumento
  2. Ejecutar prueba
  3. 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:

  1. Pasos de Estambul
  2. broswerify-istanbul
  3. gruñido-contrib-jazmín
  4. grunt-template-jasmine-istanbul - replace opción