Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jestjs 如何测试Jest中另一个函数调用的函数的分支?_Jestjs - Fatal编程技术网

Jestjs 如何测试Jest中另一个函数调用的函数的分支?

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

我有一个函数可以获取npm包的版本。该功能通过这种方式分为三个部分:

**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");
  });
});