我有一个Node
项目,该项目有2个不同的jest
运行,它们通过不同的npm
任务执行。它们都使用相同的jest.config.js
,其中有coverageThreshold
的声明。我想将该阈值应用于jest
运行的组合输出。
如何将玩笑覆盖率阈值应用于多个测试运行的组合输出?
供参考,see the code for the sample project described below here
为说明问题,假设项目有一个如下所示的文件:
正在测试的代码
# src/index.js
function run(cond) {
if (cond) {
return "foo";
}
return "bar";
}
module.exports = run;
项目中还有2个测试:
测试1
# src/__tests__/index.group1.test.js
var run = require("../index");
describe("when cond is true", () => {
it("should return 'foo'", () => {
expect(run(true)).toEqual("foo");
});
});
测试2
# src/__tests__/index.group1.test.js
var run = require("../index");
describe("when cond is false", () => {
it("should return 'bar'", () => {
expect(run(false)).toEqual("bar");
})
});
npm
中的测试覆盖率package.json
脚本如下:
"test:group1:coverage": "jest --testPathPattern=group1 --coverage",
"test:group2:coverage": "jest --testPathPattern=group2 --coverage"
运行npm run test:group1:coverage
会生成:
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 75 | 50 | 100 | 75 | |
index.js | 75 | 50 | 100 | 75 | 5 |
----------|----------|----------|----------|----------|-------------------|
运行npm run test:group2:coverage
会生成:
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 75 | 50 | 100 | 75 | |
index.js | 75 | 50 | 100 | 75 | 3 |
----------|----------|----------|----------|----------|-------------------|
Based on this post,我可以像这样单独执行npm任务...
"test:coverage": "npm run test:group1:coverage && mv ./coverage/coverage-final.json ./coverage/coverage-group1-final.json && npm run test:group2:coverage && mv ./coverage/coverage-final.json ./coverage/coverage-group2-final.json && node ./scripts/map-coverage.js"
...以生成合并的覆盖率报告,如下所示:
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.js | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
到目前为止,一切都很好。尝试将覆盖范围阈值应用于组合运行时会出现问题。
现在,如果我像这样将coverageThreshold
添加到jest.config.js
...
module.exports = {
coverageThreshold: {
global: {
branches: 90,
functions: 90,
lines: 90,
statements: 90,
},
},
};
...并运行npm run test:coverage
,测试失败...
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 75 | 50 | 100 | 75 | |
index.js | 75 | 50 | 100 | 75 | 5 |
----------|----------|----------|----------|----------|-------------------|
Jest: "global" coverage threshold for statements (90%) not met: 75%
Jest: "global" coverage threshold for branches (90%) not met: 50%
Jest: "global" coverage threshold for lines (90%) not met: 75%
...,因为它首先运行group1
测试,但该测试本身无法超过jest.config.js
中设置的覆盖率阈值。我想对每次运行忽略此阈值,而仅将其应用于合并的报告。
我知道我可以将jest.config.js
文件拆分为单独的文件,并为每个测试组应用单独的覆盖阈值,但是我不想为每个测试组单独管理阈值。在所有单独的测试运行都已完成并合并之后,我想将其整体上测量/应用到项目中。
答案 0 :(得分:0)
不要组合任务,只组合 pathPattern。
您可以尝试为 group1 和 group2 创建一个任务,如下所示
"test:commongroup:coverage": "jest --testPathPattern=commonGroup --coverage",
其中 commonGroup 是包含 group1 和 group2 的模式。