如何从业力代码覆盖率报告中排除文件?

Posted

技术标签:

【中文标题】如何从业力代码覆盖率报告中排除文件?【英文标题】:How do I exclude files from karma code coverage report? 【发布时间】:2015-05-22 00:50:40 【问题描述】:

有没有办法从 karma 覆盖率运行器 https://github.com/karma-runner/karma-coverage 的代码覆盖率报告中排除文件?

【问题讨论】:

【参考方案1】:

您可以在这里使用多种技术:karma 使用 minimatch glob 作为文件路径,并且可以利用它来排除某些路径。

作为第一个解决方案,我会说尝试仅添加文件的路径以对覆盖范围进行预处理:

// karma.conf.js
module.exports = function(config) 
  config.set(
    files: [
      'src/**/*.js',
      'test/**/*.js'
    ],

    // coverage reporter generates the coverage
    reporters: ['progress', 'coverage'],

    preprocessors: 
      // source files, that you wanna generate coverage for
      // do not include tests or libraries
      // (these files will be instrumented by Istanbul)
      'src/**/*.js': ['coverage']
    ,

    // optionally, configure the reporter
    coverageReporter: 
      type : 'html',
      dir : 'coverage/'
    
  );
;

以上是 karma-coverage 中的默认示例,它表明只有 src 文件夹中的那些文件将被预处理。

另一个技巧是使用! 运算符来排除特定路径:

preprocessors: 
  // source files, that you wanna generate coverage for
  // do not include tests or libraries
  'src/**/!(*spec|*mock).js': ['coverage']
,

上面的一个使覆盖仅在那些不以spec.jsmock.js 结尾的javascript 文件上运行。文件夹也可以这样做:

preprocessors: 
  // source files, that you wanna generate coverage for
  // do not include tests or libraries
  'src/**/!(spec|mock)/*.js': ['coverage']
,

不要处理 specmock 文件夹中的任何 Javascript 文件。

【讨论】:

提示:这将排除所有 spec 和 mock 文件夹,如果它们在 src/spec 和 src/mock 文件夹中,那么像这样使用:'src/!(spec|mock)/**/*.js': ['coverage'] 可以添加多行吗? 'src/**/*.js': ['coverage'],'src/!(vendor)/*.js,*.js': ['coverage']。我正在寻找的是添加每个 .js 文件,但不包括属于供应商的 .js 文件 当然,您可以添加任意数量的行,只要每个键/路径不重复。 @MarcoL 我仍然在我的 lcov.info 中获取供应商文件我已经尝试了上述方法,以及 'src/**/!(vendor)/*.js,*.js': ['coverage']【参考方案2】:

如果您使用的是karma-esm@open-wc/testing-karma,后者使用karma-esm,请将一个全局字符串数组传递给esm.coverageExclude

const  createDefaultConfig  = require('@open-wc/testing-karma');

const merge = require('deepmerge');

/**
 * @param  import('@types/karma').Config config
 * @return  import('@types/karma').Config
 */
module.exports = config => 
  config.set(merge(createDefaultConfig(config), 
    files: [ pattern: config.grep ? config.grep : 'src/**/*.test.js', type: 'module' ],
    esm: 
      nodeResolve: true,
      babel: true,
      coverageExclude: ['src/*.test.js'],
    ,
  ));
  return config;
;

【讨论】:

以上是关于如何从业力代码覆盖率报告中排除文件?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Angular 单元测试中业力代码覆盖率报告中的 1x 3x 等是啥意思?

如何从代码覆盖率伊斯坦布尔记者中排除模拟文件

nyc (istanbul) 从覆盖率报告中排除测试代码

singleRun = true 时未创建业力覆盖文件