私はファイルを持っていますが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
カバレッジプロバイダーを使用していました。
// 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]
コメントを追加