1

我在我的 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%)

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

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

4

2 回答 2

0

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

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

成功了。

于 2017-04-20T12:54:32.237 回答
0

它似乎没有内置在伊斯坦布尔中,但我可以做的是创建一个摘要 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);
        }
    }
});

从技术上讲,终端部分可以使用execin node 完成,但我想要一个 shell 命令,这样我就可以进行预提交执行。

于 2016-11-29T15:19:21.837 回答