我有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看起来像这样:
@H_403_7@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配置挂钩,如下所示:
@H_403_7@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
});
};