让 Karma、6to5ify 和伊斯坦布尔打球

Posted

技术标签:

【中文标题】让 Karma、6to5ify 和伊斯坦布尔打球【英文标题】:Getting Karma, 6to5ify and Istanbul to play ball 【发布时间】:2015-03-29 23:16:42 【问题描述】:

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

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

现在我的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
  );
;

我有点迷失如何让这一切一起工作。我尝试关注these instructions,但这不起作用,因为它没有关注package.json 中的我的browser 节点。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

所以,显然我需要 browserify-istanbul,我需要 browserify configure 钩子,就像这样:

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

【讨论】:

以上是关于让 Karma、6to5ify 和伊斯坦布尔打球的主要内容,如果未能解决你的问题,请参考以下文章

Parse Karma-覆盖 |伊斯坦布尔报告

Karma + Browserify + Jasmine + 伊斯坦布尔 + React 覆盖

使用 Webpack 的 Karma:伊斯坦布尔覆盖率为 100%(0/0)

Karma , 伊斯坦布尔 - 代码覆盖率报告 Unknown% (0/0)

使用 karma-jasmine 和 istanbul 的 Typescript 代码覆盖率

使用 karma-jasmine 和 istanbul 的 Typescript 代码覆盖率