我正在使用我的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%)
这让我获得全球测试报道。
但我想做的是检查一个文件的覆盖范围。我该怎么做?
答案 0 :(得分:0)
它似乎没有被构建到istanbul中,但是我能做的是创建一个摘要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命令,所以我可以进行预提交执行。
答案 1 :(得分:0)
我设法通过配置文件实现了这一目标。
instrumentation:
excludes: [ '!yourfile.js' ]
诀窍。