您如何使用伊斯坦布尔检查单个文件的覆盖率?

Posted

技术标签:

【中文标题】您如何使用伊斯坦布尔检查单个文件的覆盖率?【英文标题】:How do you check coverage of a single file with Istanbul? 【发布时间】:2017-04-12 18:39:13 【问题描述】:

我正在我的 Angular 项目上使用 karma/jasmine 运行测试覆盖率,并将覆盖率输出到文件 ./coverage/coverage.json

然后我可以运行如下命令:

./node_modules/istanbul/lib/cli.js check-coverage --lines 90 
Output: ERROR: Coverage for lines (89.1%) does not meet global threshold (90%)

这让我获得了全球测试覆盖率。

但我想做的是只检查一个文件的覆盖率。我该怎么做?

【问题讨论】:

【参考方案1】:

它似乎没有内置到伊斯坦布尔,但我可以做的是创建一个摘要 JSON,并在终端中运行它后使用节点读取它。

首先,Karma 配置需要生成一个以文件为键的 JSON 摘要:

coverageReporter: 
    reporters: [
        type: 'json-summary', subdir: './', file: 'coverage.json'
    ]

然后你可以运行一个终端任务来获取 git 中的所有暂存文件。

(gulp karma)

ROOT_DIR=$(git rev-parse --show-toplevel)
STAGED_FILES=($(git diff --cached --name-only --diff-filter=ACM | grep ".js$"))

for file in $STAGED_FILES; do
  echo "gulp coverage -f $ROOT_DIR/$file"
  git show :$file | gulp coverage -f "$ROOT_DIR/$file"
done;

gulp 任务如下所示:

gulp.task('coverage', function () 
    var threshold = 90;
    var coverageJSON = require('./coverage/coverage.json');

    var metrics = [ 'lines', 'statements', 'functions', 'branches' ];
    for (var i in metrics) 
        if (coverageJSON[ argv.f ][ metrics[ i ] ].pct < threshold) 
            console.log('ERROR:', argv.f, 'does not meet', threshold, 'percent coverage of', metrics[ i ]);
            process.exit(0);
        
    
);

从技术上讲,终端部分可以在节点中使用exec 完成,但我想要一个 shell 命令,以便我可以进行预提交执行。

【讨论】:

【参考方案2】:

我设法通过配置文件实现了这一点。

instrumentation:
   excludes: [ '!yourfile.js' ]

成功了。

【讨论】:

以上是关于您如何使用伊斯坦布尔检查单个文件的覆盖率?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得业力覆盖率(伊斯坦布尔)来检查所有源文件的覆盖率?

您如何将伊斯坦布尔代码覆盖率与转译的 Typescript 一起使用?

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

如何从终端中的谷歌测试套件获得c ++代码超额?

Karma-coverage 检查 JS 文件中的测试覆盖率,而不是 Angular 2 中的 TS

如何在单个命令中使用 mochawesome 和 mocha-sonarqube-report?