您如何使用伊斯坦布尔检查单个文件的覆盖率?
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 一起使用?