Javascript 获取预编译源代码的Karma代码覆盖率

Javascript 获取预编译源代码的Karma代码覆盖率,javascript,karma-runner,webpack,babeljs,karma-coverage,Javascript,Karma Runner,Webpack,Babeljs,Karma Coverage,我使用Karma运行测试,使用webpack捆绑文件,使用babel进行es6->es5转换。我已经运行了测试并生成了代码覆盖率,但是代码覆盖率数字是传输后的源文件的。是否仍然需要为原始源文件获取代码覆盖率 我试着使用sourcemap预处理器,但它似乎没有任何作用。我需要把它添加到某个网页配置中吗 karma.conf.js config.set({ browsers: ['Chrome'], //run in Chrome files: [ 'src/**/

我使用Karma运行测试,使用webpack捆绑文件,使用babel进行es6->es5转换。我已经运行了测试并生成了代码覆盖率,但是代码覆盖率数字是传输后的源文件的。是否仍然需要为原始源文件获取代码覆盖率

我试着使用
sourcemap
预处理器,但它似乎没有任何作用。我需要把它添加到某个网页配置中吗

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

以下配置工作正常:

karma.conf.js package.json
您可以使用它。当我尝试添加isparta作为预加载程序时(无论是否使用babel属性),它不再传输
import
语句上的代码和错误。它说用它来代替标准的巴别塔加载器,所以我不确定我做错了什么。这对我来说非常有用。比我遇到的任何事情都简单。这也是我见过的唯一一个不使用“替代Karma配置”的例子,其中
require.context
用于创建单个入口点。我还发现,在处理大型代码库时,此解决方案比
require.context
选项工作得更好。谢谢,在花了几个小时尝试其他解决方案后,这一个终于给了我如何让它工作的想法。我正在使用@djskinner提到的“替代配置”,它也可以使用。这在Webpack2下不太可能起作用。我得到的
isparta不是加载程序
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!
    }
  });
};
{
  "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"
  }
}