我在很多地方都使用了一个模拟程序,因此我想将其移动到一个可以重用的单独文件中。
我认为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;
在测试文件的顶部,我尝试了各种操作:
jest.setMock("dotenv-safe", "../../mocks/dotenv-safe");
不起作用要测试的代码获取"../../mocks/dotenv-safe.mock"
而不是模块。
jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe"));
不起作用-被测试的代码抛出TypeError: dotenvSafe.load is not a function
。
jest.mock("dotenv-safe", () => { return { load: jest.fn(() => ({error: undefined, parsed: []})) }; });
确实有效!但是该模拟是内联的,我想将其移动到单独的文件中。我不想在每个文件中重复此操作。
正确的语法是什么?
答案 0 :(得分:1)
require("../../mocks/dotenv-safe")
等于模块导出。使用的是默认导出,因此应为:
jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe").default);