1

我正在尝试使用 Webpack、Babel 和 Karma 设置项目,但在正确配置源文件的测试覆盖率时遇到问题。

我正在使用 Webpack 捆绑和转译我的 javascript 文件,使用 babel-loader 和带有 karma-webpack 的 Karma 来运行我的测试。

问题是我不能将我所有的源文件都包含在覆盖范围内,只有我在测试文件中导入的那些。我正在使用babel-plugin-istanbul来检测我的 es2015 代码。

这是我的 webpack 配置文件:

const { resolve } = require('path');

module.exports = {
  context: __dirname,
  entry: './main.js',
  output: {
    filename: 'bundle.js',
    path: resolve(__dirname, 'dist'),
  },
  resolve: {
    root: __dirname,
    extensions: ['', '.js', '.jsx'],
    alias: {
      components: resolve(__dirname, 'src/components'),
    },
  },
  devtool: 'eval-source-map',
  module: {
    loaders: [
      {
        test: /\.jsx?$/,
        loader: 'babel',
        exclude: /node_modules/,
      },
    ],
  },
};

还有我的业力配置文件:

const webpackConfig = require('./webpack.config');

process.env.BABEL_ENV = 'test';

module.exports = function karmaConfig(config) {
  config.set({
    basePath: './',
    frameworks: ['mocha', 'chai', 'sinon'],
    files: ['specs/**/*.spec.js'],
    plugins: [
      'karma-webpack',
      'karma-mocha',
      'karma-chai',
      'karma-sinon',
      'karma-spec-reporter',
      'karma-coverage',
      'karma-spec-reporter',
      'karma-phantomjs-launcher',
    ],
    preprocessors: {
      'specs/**/*.spec.js': ['webpack'],
      'src/**/*.+(js|jsx)': ['webpack'],
    },
    reporters: ['spec', 'coverage'],
    coverageReporter: {
      dir: 'coverage',
      reporters: [
        { type: 'lcov', subdir: 'reporter-lcov' },
        { type: 'text-summary' },
      ],
    },
    webpack: webpackConfig,
    webpackMiddleware: {
      noInfo: true,
    },
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['PhantomJS'],
    singleRun: false,
    concurrency: Infinity,
  });
};

这是我的.babelrc文件,我在其中配置 babel-plugin-istanbul:

{
  "presets": ["es2015", "react"],
  "env": {
    "test": {
      "plugins": [
        ["istanbul", { "exclude": ["**/*.spec.js"] }]
      ]
    }
  }
}

我错过了什么吗?

提前致谢!

4

0 回答 0