gpt4 book ai didi

typescript - 是什么导致 Jest 在此代码中显示 75% 的分支覆盖率?

转载 作者:行者123 更新时间:2023-12-04 17:24:30 25 4
gpt4 key购买 nike

我有一个文件,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 报告如下所示:
The lcov report
请注意,如果我按 n 或 j,则没有任何变化。
我一直在研究这个,似乎它可能与 Babel 生成的 esmodule 胶水代码有关,但是我不知道如何解决这个问题。
如果您需要更多信息,请发表评论。任何帮助将不胜感激。

最佳答案

经过很长时间试图断断续续地找出问题之后,我得出了以下答案。
基本上,在我的 jest.config.js我正在使用 v8覆盖提供者。

// Indicates which provider should be used to instrument code for coverage
coverageProvider: "v8",
我使用节点版本 12.16.1,所以这个提供者不是很好,有很多问题。
更改为 babel provider 解决了我遇到的所有问题,并为这段代码提供了 100% 的分支覆盖率。
// Indicates which provider should be used to instrument code for coverage
coverageProvider: "babel",

关于typescript - 是什么导致 Jest 在此代码中显示 75% 的分支覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64185258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com