Переместите общий код насмешки в отдельный файл, содержащий ручной макет Jest - PullRequest
0 голосов
/ 01 февраля 2019

Во многих местах я использую макет, поэтому я хочу переместить его в отдельный файл, который можно использовать повторно.

Я думаю, что Jest называет это "ручным макетом".Однако я не хочу использовать соглашение __mocks__.

Верх проверяемого файла:

import * as dotenvSafe from "dotenv-safe";

Файл с ручным макетом:

const dotenvSafe: any = jest.genMockFromModule("dotenv-safe");

dotenvSafe.load = jest.fn(() => {     // the function I want to mock
  return {
    error: undefined,
    parsed: [],
  };
});

export default dotenvSafe;

В верхней части тестового файла я пробовал разные вещи:

  1. jest.setMock("dotenv-safe", "../../mocks/dotenv-safe");
    Не работает.Тестируемый код получает "../../mocks/dotenv-safe.mock" вместо модуля.

  2. jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe"));
    Не работает - тестируемый код выдает TypeError: dotenvSafe.load is not a function.

  3. jest.mock("dotenv-safe", () => { return { load: jest.fn(() => ({error: undefined, parsed: []})) }; });
    Работает!Но макет встроенный, и я хочу переместить его в отдельный файл.Я не хочу повторять это в каждом файле.

Какой правильный синтаксис?

1 Ответ

0 голосов
/ 01 февраля 2019

require("../../mocks/dotenv-safe") соответствует экспорту модуля.Используется экспорт по умолчанию, поэтому он должен быть:

jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe").default);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...