生成jasmine测试的istanbul代码覆盖率报告(通过grunt)在phantomjs中的browserify包上运行

时间:2013-12-17 23:46:33

标签: node.js gruntjs phantomjs browserify istanbul

标题说明了一切。尽管在网上搜索,我还没有找到解决这个问题的唯一例子。

以下是一些近乎未命中的内容

这是我正在进行的代码https://github.com/wheresrhys/on-guard/tree/browserify(注意它是'browserify'分支--Gruntfile.js有点乱,但很快就会整理它)。我使用console.log进行的初步调查表明,某些方式bundle.src.js正在页面中加载,但是当测试运行(并传递!)时,bundle.src.js中的代码没有运行,所以我感觉它可能是一个混淆问题...虽然只限于phantomjs,因为当我打开chrome中的specrunner时代码正在运行。

1 个答案:

答案 0 :(得分:0)

我正在使用grunt-browserify + browserify-istanbul + grunt-contrib-jasmine + grunt-template-jasmine-istanbul作为解决方案。在使用browserify构建源文件时,此解决方案还排除了第三方库

首先显示代码,我稍后会解释,

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']);

生成伊斯坦布尔报道报告的步骤可以归结为三个:

  1. 仪器代码
  2. 运行测试
  3. 生成覆盖率报告
  4. 在我们的解决方案中,我们在步骤1中使用browerify-istanbul,在步骤2和3中使用grunt-contrib-jasminerunt-template-jasmine-istanbul

    browserify-istanbul将让你在browserify构建步骤中检测代码,这样,我们就可以轻松忽略第三方库。但是grunt-template-jasmine-istanbul会再次检测代码。为避免这种情况,您可以在选项中将replace设置为false

    参考文献:

    1. Istanbul steps
    2. broswerify-istanbul
    3. grunt-contrib-jasmine
    4. grunt-template-jasmine-istanbul - replace选项