Jestjs 如何测试Jest中另一个函数调用的函数的分支?
我有一个函数可以获取npm包的版本。该功能通过这种方式分为三个部分:Jestjs 如何测试Jest中另一个函数调用的函数的分支?,jestjs,Jestjs,我有一个函数可以获取npm包的版本。该功能通过这种方式分为三个部分: **version.ts** import fs from "fs"; import path from "path"; const getPathToPackageJson = (): string => path.resolve(__dirname, "../", "../", "../", "../", "package.json"); const getPackageJson = (path: stri
**version.ts**
import fs from "fs";
import path from "path";
const getPathToPackageJson = (): string =>
path.resolve(__dirname, "../", "../", "../", "../", "package.json");
const getPackageJson = (path: string): object =>
fs.existsSync(path)
? JSON.parse(fs.readFileSync(path, { encoding: "utf8" }))
: undefined;
const getPackageJsonVersion = (): string =>
getPackageJson(getPathToPackageJson())["version"] || undefined;
export const versionUtils = {
getPackageJsonVersion,
getPathToPackageJson,
getPackageJson
};
我想测试未定义的分支。现在我的测试是这样的:
**version.spec.ts**
import { versionUtils } from "./version.utils";
jest.mock("../../../../package.json", () => {
return {
version: "1.0.0"
};
});
describe("getting the package.json version", () => {
test("return 1.0.0", () => {
expect(versionUtils.getPackageJsonVersion()).toEqual("1.0.0");
});
});
所以,这部分是有效的,但我缺少了100%覆盖率的未定义分支。这里的问题不是我是否真的需要它,而是我是否想要它。我也是
我用jest.fn()、jest.spyOn()、jest.mock()和jest.clearAllMocks()尝试了几种方法,但都没有用。任何人都知道如何测试未定义的回报率吗?这最终奏效了: 文件 试验
import fs from "fs";
import path from "path";
const getPathToPackageJson = (): string =>
path.resolve(__dirname, "../", "../", "../", "../", "package.json");
const getPackageJson = (p: string): object =>
fs.existsSync(p)
? JSON.parse(fs.readFileSync(p, { encoding: "utf8" }))
: undefined;
const getPackageJsonVersion = (): string => {
const p = getPathToPackageJson();
const packageJson = getPackageJson(p);
if (packageJson) return packageJson["version"];
else return undefined;
};
export const versionUtils = {
getPackageJsonVersion
};
import { versionUtils } from "./version.utils";
import fs from "fs";
jest.mock("fs");
describe("getting the package.json version", () => {
test("return undefined if file not found", () => {
jest.spyOn(fs, "existsSync").mockReturnValue(false);
const version = versionUtils.getPackageJsonVersion();
expect(version).toBeUndefined();
});
test("return 1.0.0", () => {
const packageJson = '{ "version": "1.0.0" }';
jest.spyOn(fs, "existsSync").mockReturnValue(true);
jest.spyOn(fs, "readFileSync").mockReturnValue(packageJson);
const version = versionUtils.getPackageJsonVersion();
expect(version).toEqual("1.0.0");
});
});