如何使用 isparta 从 karma 的代码覆盖范围中排除 jquery 等第三方导入?

How do I exclude third party imports like jquery from code coverage in karma using isparta?

我使用 karma、webpack 和 jasmine 来测试我的 ES6 代码,使用 istanbul 和 isparta 来测试代码覆盖率。我的测试似乎都通过了,但是覆盖率真的很低,因为我不得不导入 jquery 和 jquery-resizable-dom,它作为未经测试的代码包含在覆盖率中。

我有很多 vanilla js 代码(~200 行),但后来添加了如下内容:

import $ from 'jquery';
require('imports?jQuery=jquery!jquery-resizable-dom');

const makeImagesResizable = () => {
  $('.img').resizable({
    handleSelector: '> .glyphicon-resize-full'
  });
};

export { makeImagesResizable };

在我的 jasmine 测试中,我导入了 makeImagesResizable 来测试它。当我 运行 测试时,我得到大约 27% 的代码覆盖率,因为它在覆盖率中包含 jquery 代码。删除上面的整个代码块(jquery 导入和所有使用 jquery 的代码)将覆盖率提高到 94%,这更接近实际覆盖率(jquery 代码非常短).

有没有办法从代码覆盖范围中排除第三方导入以反映我们从代码中实际获得的数字?

这也是我的业力配置:

const webpack = require('webpack');
const isparta = require('isparta');

module.exports = (config) => {
  config.set({
    frameworks: ['jasmine'],
    files: [
      './spec/*.spec.js',
    ],
    webpack: {
      module: {
        loaders: [
          { test: /\.js$/, loader: 'imports?define=>false!babel' },
        ],
      },
    },
    webpackMiddleware: {
      noInfo: true,
    },
    preprocessors: {
      './spec/*.spec.js': ['webpack', 'coverage'],
    },
    reporters: ['progress', 'coverage'],
    coverageReporter: {
      instrumenters: { isparta },
      reporters: [
        {
          type: 'html',
          dir: 'coverage',
        },
      ],
    },
    browsers: ['Chrome'],
    plugins: [
      'karma-webpack',
      'karma-jasmine',
      'karma-coverage',
      'karma-chrome-launcher',
    ],
  });
};

我只包含了测试文件,因为出于某种原因,包含源文件 return 根本没有任何覆盖。

http://karma-runner.github.io/1.0/config/configuration-file.html 中引用他们的指南,您可以使用 exclude 选项来防止他们影响您的结果。