node.js - Flytta gemensam mocking-kod till en separat fil som innehåller en Jest-manuell mock


Det finns en mock som jag använder på många ställen, så jag vill flytta den till en separat fil som kan återanvändas.

Jag tror att Jest kallar detta för en "manuell mock". Men jag vill inte använda konventionen __mocks__.

Toppen av filen som testas:

import * as dotenvSafe from "dotenv-safe";

Den manuella mockfilen:

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

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

export default dotenvSafe;

I toppen av testfilen försökte jag olika saker:

  1. jest.setMock("dotenv-safe", "../../mocks/dotenv-safe");
    Fungerar inte. Koden som testas får "../../mocks/dotenv-safe.mock" istället för ett modul.

  2. jest.mock("dotenv-safe",() => require("../../mocks/dotenv-safe"));
    Fungerar inte - Koden som testas kastar TypeError: dotenvSafe.load är inte en funktion.

  3. jest.mock("dotenv-safe",() => { return { load: jest.fn(() => ({error: undefined, parsed: []})) }; });
    Fungerar! Men mocken är inline, och jag vill flytta den till en separat fil. Jag vill inte upprepa detta i varje fil.

Vad är den korrekta syntaxen?

Svar #1

require("../../mocks/dotenv-safe") motsvarar modulens exports. Det är standardexporten som används, så det borde vara:

jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe").default);

Relaterade artiklar