获取预转换源代码的Karma代码覆盖率

Bil*_*ill 8 javascript karma-runner webpack karma-coverage babeljs

我正在使用Karma来运行测试,使用webpack来捆绑文件,并使用babel来进行es6 - > es5 transpilation.我已经运行了测试并生成了代码覆盖率,但代码覆盖率数字是在转换后的源文件.反正有没有获得原始源文件的代码覆盖率?

我尝试使用sourcemap预处理器,但似乎没有做任何事情.我是否需要将其添加到某个地方的webpack配置中?

karma.conf.js

config.set({
    browsers: ['Chrome'], //run in Chrome

    files: [
        'src/**/*-test.js'
    ],

    frameworks: ['mocha'], //use the mocha test framework

    plugins: [
        'karma-chrome-launcher',
        'karma-mocha',
        'karma-sourcemap-loader',
        'karma-webpack',
        'karma-coverage',
    ],

    preprocessors: {
        'src/**/*-test.js': ['webpack']
    },

    reporters: ['dots', 'coverage'], //report results in this format

    coverageReporter: {
        reporters: [{
            type: 'text-summary',
        }, {
            type: 'html',
            dir: 'build/reports/coverage'
        }]
    },

    singleRun: true, //just run once by default

    webpack: {
        node: {
            fs: 'empty'
        },

        // Instrument code that isn't test or vendor code.
        module: {
            loaders: [{
                test: /\.js?$/,
                include: path.join(__dirname, 'src/js'),
                loader: 'babel?stage=0'
            }],

            postLoaders: [{
                test: /\.js$/,
                exclude: /(test|node_modules)\//,
                loader: 'istanbul-instrumenter'
            }]
        }
    },

    webpackMiddleware: {
        noInfo: true //please don't spam the console when running in karma!
    }
});
Run Code Online (Sandbox Code Playgroud)

kat*_*nci 15

以下配置工作正常:

karma.conf.js

var path = require('path');

module.exports = function(config) {
  config.set({
    browsers: [ 'Chrome' ], //run in Chrome

    files: [
      'src/**/*-test.js'
    ],

    frameworks: [ 'mocha' ], //use the mocha test framework

    preprocessors: {
      'src/**/*-test.js': [ 'webpack' ]
    },

    reporters: [ 'dots', 'coverage' ], //report results in this format

    coverageReporter: {
      reporters: [
        {
          type: 'text-summary'
        },
        {
          type: 'html',
          dir: 'build/reports/coverage'
        }
      ]
    },

    singleRun: true, //just run once by default

    webpack: {
      node : {
        fs: 'empty'
      },

      // Instrument code that isn't test or vendor code.
      module: {
        preLoaders: [
          { test: /\.js$/, loader: 'isparta', include: path.join(__dirname, 'src/js') }
        ],
        loaders: [
          {
            test: /\.js$/,
            include: path.join(__dirname, 'src/js'),
            loader: 'babel?stage=0'
          }
        ]
      }
    },

    webpackMiddleware: {
      noInfo: true //please don't spam the console when running in karma!
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

的package.json

{
  "devDependencies": {
    "babel-core": "^5.8.22",
    "babel-loader": "^5.3.2",
    "chai": "^3.2.0",
    "isparta-loader": "^0.2.0",
    "karma": "^0.13.9",
    "karma-chrome-launcher": "^0.2.0",
    "karma-coverage": "^0.5.0",
    "karma-mocha": "^0.2.0",
    "karma-webpack": "^1.7.0",
    "mocha": "^2.2.5",
    "webpack": "^1.11.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我很有用.比我遇到的任何其他事情都简单得多.它也是我见过的唯一一个不使用'alternative Karma配置'的例子,其中`require.context`用于创建单个入口点. (2认同)