Заставить Karma, 6to5ify и Istanbul играть в мяч

У меня есть Browserify, 6to5ify и Karma, чтобы играть хорошо, успешно выполняя мои спецификации. Однако когда я добавляю покрытие кода, все идет наперекосяк. Я пробовал несколько подходов:

  • Добавьте browserify-istanbul преобразование в мой karma.conf.js. Однако это приводит к тому, что он пытается запустить инструменты для моих спецификаций, как это может показаться.
  • Запустите препроцессор coverage на моих исходных файлах. Но из-за того, что Стамбул (даже douglasduteil/karma-coverage#next) не читает мое преобразование 6to5ify в браузере, он немедленно падает при первом же попытке разобрать файл (из-за оператора import), или когда я использую karma-coverage#next, он не учитывает сопоставление browser в моем package.json (мобильный проект, сопоставленный 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
  });
};

Я немного потерял, как заставить все это работать вместе. Я попытался следовать этим инструкциям, но это не сработало, поскольку не соответствовало моему узлу browser в package.json. Любая помощь будет принята с благодарностью.


person Steven    schedule 30.01.2015    source источник


Ответы (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
  });
};
person Steven    schedule 30.01.2015