代码覆盖率
当在测试中需要输出代码覆盖率的时候,我们需要进行一定的配置,下面是一个配置示例:
module.exports = {
collectCoverage: true,
coverageThreshold: {
global: {
branches: 95,
functions: 95,
lines: 95,
statements: 95
},
'./src/reducers/**/*.ts': {
statements: 90
},
'./src/utils/**/*.ts': {
functions: -5
}
},
coverageDirectory: 'reports',
collectCoverageFrom:["src/**/*.ts","!**/node_modules/**"],
coveragePathIgnorePatterns: ["<rootDir>/dist/","<rootDir>/node_modules/"],
coverageProvider: "babel",
coverageReporters: ["clover","json",'lcov',['text',{skipFull: true}]]
}
在这个配置示例中,我们对其中的各个字段分别进行一下讲解:
collectCoverage字段为一个boolean值,指定其为true时,才会触发代码覆盖率的收集操作coverageThreshold字段是对代码覆盖率的统计指标的定义。其可以定义一个全局的代码覆盖率的指标,用global表示,其中要求branches(条件分支)的覆盖率最少达到95%,functions(函数)的代码覆盖率最少也要达到95%,lines代码行的代码覆盖率也要达到95%,statements(语句)的代码覆盖率也要达到95%。此外,我们还可以单独指定某个匹配模式下对应的代码覆盖率,比如示例中./src/reducers/**/*.ts模式下statements的代码覆盖率达到90%即可。也可以指定一个负值,用于表示没有覆盖的测试的最大数量,比如示例中./src/utils/**/*.ts模式下,functions没有测试的最大数量为5。一旦测试的代码覆盖率达不到我们设置的指标,那么测试就会失败。coverageDirectory用于指定代码覆盖率输出报告的文件目录,如果没有设置这个属性,那么报告会输出到项目目录的coverage目录中。collectCoverageFrom用于指定从什么地方收集要测试的代码。coveragePathIgnorePatterns用于指定测试时,要忽略哪些目录下的代码。coverageProvider用于指定输出报告的提供者,可选的有babel和v8,默认使用babel。coverageReporters用于指定输出报告的格式。默认值为["clover", "json", "lcov", "text"]。
除了在示例中提及到的几个有关代码覆盖率的选项外,还有一个forceCoverageMatch选项,其主要用于从上面的配置中已忽略的部分再添加进测试中。