首页 文章

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

提问于
浏览
8

我正在使用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!
    }
});

1 回答

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

    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"
      }
    }
    

相关问题