Как проверить ветви функции, вызываемой другой функцией в Jest? - PullRequest
0 голосов
/ 10 января 2020

У меня есть функция, которая получает версию пакета 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 (), но безрезультатно. Кто-нибудь знает, как go о проверке неопределенного возврата?

1 Ответ

0 голосов
/ 11 января 2020

Это сработало, в конце концов:

файл

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
};

test

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");
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...