我有Browserify,6to5ify和Karma玩得很好,成功运行我的规格.然而,当我添加代码覆盖时,情况就会发生变化.我尝试了几种方法:
>将browserify-istanbul变换添加到我的karma.conf.js.但是,这导致它尝试在我的spec文件上运行检测,它也会出现.
>在源文件上运行coverage预处理器.但是因为istanbul(甚至是douglasduteil / karma-coverage#next)没有读取我的6to5ify browserify转换,所以它会立即崩溃它试图解析的第一个文件(因为import语句),或者当我使用karma-coverage #next时,它不尊重我的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 }); };
我有点失去了如何让这一切都在一起工作.我试过跟随these instructions,但这不起作用,因为它没有跟随我在package.json中的浏览器节点.任何帮助将不胜感激.
解决方法
所以,显然我需要browserify-istanbul,我需要browserify配置挂钩,如下所示:
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",browserify: { debug: false,configure: function(bundle){ bundle.on('prebundle',function(){ bundle .transform(to5ify) .transform(hbsfy) .transform(cover(coverOptions)); }); } },preprocessors: { "spec/**/*": ["browserify"] },autoWatch: true }); };