7

我有 Browserify、6to5ify 和 Karma 玩得很好,成功运行了我的规范。但是,当我添加代码覆盖率时,事情就向南了。我尝试了几种方法:

  • browserify-istanbul转换添加到我的 karma.conf.js。但是,这会导致它尝试在我的规范文件上运行检测,它也会出现。
  • coverage在我的源文件上运行预处理器。但是因为 istanbul (even douglasduteil/karma-coverage#next) 没有读取我的6to5ifybrowserify 转换,所以它会在它尝试解析的第一个文件上立即崩溃(因为该import语句),或者当我使用 karma-coverage#next 时,它不尊重browser映射我的 package.json(移动项目,将 Backbone 映射到外骨骼)。

现在我的karma.conf.js样子是这样的:

module.exports = function(karma){
  karma.set({
    frameworks: ["browserify", "mocha", "chai-sinon"],
    browserify: {
      debug: true,
      extensions: [".js", ".hbs"],
      transform: ["6to5ify", "hbsfy"]
    },
    reporters: ["dots", "osx", "junit", "coverage"],
    coverageReporter: {
      type: "text"
    },
    junitReporter: {
      outputFile: "spec/reports/test-results.xml"
    },
    preprocessors: {
      "src/javascript/**/*": ["coverage"],
      "spec/**/*": ["browserify"]
    },
    browsers: ["PhantomJS"],
    files: ["spec/unit/**/*Spec.js"],
    logLevel: "LOG_DEBUG",
    autoWatch: true
  });
};

我有点迷失如何让这一切一起工作。我尝试按照这些说明进行操作,但这不起作用,因为它没有遵循我的browser节点package.json。任何帮助将不胜感激。

4

1 回答 1

13

所以,显然我需要browserify-istanbul,并且我需要 browserifyconfigure钩子,如下所示:

var to5ify = require('6to5ify');
var hbsfy = require('hbsfy');
var cover = require('browserify-istanbul');

var coverOptions = {
  ignore: ['**/*Spec.js', '**/lib/*.js', '**/fixtures/*.hbs'],
  defaultIgnore: true
}

module.exports = function(karma){
  karma.set({
    frameworks: ["browserify", "mocha", "chai-sinon"],
    browserify: {
      debug: false,
      extensions: [".js", ".hbs"],
      configure: function(bundle){
        bundle.on('prebundle', function(){
          bundle
            .transform(to5ify)
            .transform(hbsfy)
            .transform(cover(coverOptions));
        });
      }
    },
    reporters: ["dots", "osx", "junit", "coverage"],
    coverageReporter: {
      type: "text"
    },
    junitReporter: {
      outputFile: "spec/reports/test-results.xml"
    },
    preprocessors: {
      "spec/**/*": ["browserify"]
    },
    browsers: ["PhantomJS"],
    files: ["spec/unit/**/*Spec.js"],
    logLevel: "LOG_DEBUG",
    autoWatch: true
  });
};
于 2015-01-30T14:03:51.913 回答