我有一个文件,parsePredicate.ts
我相信其中没有分支。但是,Jest覆盖率报告说它只有75%的分支覆盖率。分公司在哪里?
parsePredicate.ts
:
import parseIdentifier from "../parseIdentifier/parseIdentifier";
import parseOperator from "../parseOperator/parseOperator";
import { parseExpression } from "../parseExpression/parseExpression";
const parsePredicate = (str: string)=>{
let {identifier: left, rest:identRest} = parseIdentifier(str);
let {operator, rest:opRest} = parseOperator(identRest);
let {expression: right, rest:exprRest} = parseExpression(opRest);
return { left: left, operator: operator, right: right, rest: exprRest };
}
export default parsePredicate;
parsePredicate.test.ts
:
import parsePredicate from "./parsePredicate";
import parseIdentifier from "../parseIdentifier/parseIdentifier";
import parseOperator from "../parseOperator/parseOperator";
import { parseExpression } from "../parseExpression/parseExpression";
jest.mock("../parseIdentifier/parseIdentifier");
jest.mock("../parseOperator/parseOperator");
jest.mock("../parseExpression/parseExpression");
test("Parsing a predicate with number returns proper values", ()=>{
// @ts-ignore
parseIdentifier.mockReturnValueOnce({identifier: "x", rest:" = 1"});
// @ts-ignore
parseOperator.mockReturnValueOnce({operator: "=", rest:" 1"});
// @ts-ignore
parseExpression.mockReturnValueOnce({expression: "1", rest:""});
expect(parsePredicate("x = 1")).toStrictEqual({left:"x", operator:"=", right:"1", rest:""});
});
test("Parsing a predicate with math returns proper values", ()=>{
// @ts-ignore
parseIdentifier.mockReturnValueOnce({identifier: "x", rest:" = 1 + 1"});
// @ts-ignore
parseOperator.mockReturnValueOnce({operator: "=", rest:" 1 + 1"});
// @ts-ignore
parseExpression.mockReturnValueOnce({expression: "1 + 1", rest:""});
expect(parsePredicate("x = 1 + 1")).toStrictEqual({left:"x", operator:"=", right:"1 + 1", rest:""});
});
test("Parsing a predicate with string returns proper values", ()=>{
// @ts-ignore
parseIdentifier.mockReturnValueOnce({identifier: "x", rest:" = 'Hello World'"});
// @ts-ignore
parseOperator.mockReturnValueOnce({operator: "=", rest:" 'Hello World'"});
// @ts-ignore
parseExpression.mockReturnValueOnce({expression: "'Hello World'", rest:""});
expect(parsePredicate("x = 'Hello World'")).toStrictEqual({left:"x", operator:"=", right:"'Hello World'", rest:""});
});
test("Parsing a predicate with identifier returns proper values", ()=>{
// @ts-ignore
parseIdentifier.mockReturnValueOnce({identifier: "x", rest:" = ident"});
// @ts-ignore
parseOperator.mockReturnValueOnce({operator: "=", rest:" ident"});
// @ts-ignore
parseExpression.mockReturnValueOnce({expression: "ident", rest:""});
expect(parsePredicate("x = ident")).toStrictEqual({left:"x", operator:"=", right:"ident", rest:""});
});
运行时jest --coverage
,我的parsePredicate.ts
文件得到以下输出:
---------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
---------------------|---------|----------|---------|---------|-------------------
parsePredicate | 100 | 75 | 100 | 100 |
parsePredicate.ts | 100 | 75 | 100 | 100 | 11
如您所见,它表示未发现第11行。但是,第11行只是一个export
语句:
export default parsePredicate;
lcov报告如下所示:请注意,如果按n或j,则没有任何变化。
我一直在寻找到这一点,现在看来似乎可能与由巴贝尔产生esmodule胶水代码来完成,但是我不知道怎么去修复这一点。
如果您需要更多信息,请发表评论。任何帮助将不胜感激。
经过很长一段时间试图找出问题的答案之后,我得出了以下答案。
基本上,我jest.config.js
使用的是v8
coverage提供商。
// Indicates which provider should be used to instrument code for coverage
coverageProvider: "v8",
我使用的是节点版本12.16.1,因此该提供程序不是很好,并且有很多问题。
更改为babel
提供程序可以解决我遇到的所有问题,并为该代码提供100%的分支覆盖率。
// Indicates which provider should be used to instrument code for coverage
coverageProvider: "babel",
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句