如何使用 isparta 从业力的代码覆盖范围中排除第三方导入(如 jquery)?

Posted

技术标签:

【中文标题】如何使用 isparta 从业力的代码覆盖范围中排除第三方导入(如 jquery)?【英文标题】:How do I exclude third party imports like jquery from code coverage in karma using isparta? 【发布时间】:2017-05-09 02:06:00 【问题描述】:

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

我有很多原版 js 代码(约 200 行),但随后添加了如下内容:

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

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

export  makeImagesResizable ;

在我的茉莉花测试中,我导入了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',
    ],
  );
;

我只包含了测试文件,因为包含源文件由于某种原因根本不会返回任何覆盖范围。

【问题讨论】:

【参考方案1】:

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

【讨论】:

是的,我也发现了。我还决定使用 babel-istanbul-loader 而不是 sparta。现在完美运行,谢谢!

以上是关于如何使用 isparta 从业力的代码覆盖范围中排除第三方导入(如 jquery)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用isparta,webpack,jasmine和karma获得准确的代码覆盖率?

如何从VS2012单元测试中的代码覆盖率分析中排除名称以“.Test”结尾的项目

Sourcemap + istanbul/isparta 代码覆盖 webpack + babel (for es6) + mocha (+karma)

Grunt,Istanbul,Isparta和TypeScript

业力覆盖率报告显示代码已覆盖(显然未覆盖)

业力覆盖未能显示正确的结果