Node.js 将通用模拟代码移动到包含Jest手动模拟的单独文件中
我在很多地方都使用mock,所以我想将它移动到一个单独的文件中,以便重用 我认为Jest称之为“手动模拟”。但是,我不想使用Node.js 将通用模拟代码移动到包含Jest手动模拟的单独文件中,node.js,typescript,unit-testing,mocking,jestjs,Node.js,Typescript,Unit Testing,Mocking,Jestjs,我在很多地方都使用mock,所以我想将它移动到一个单独的文件中,以便重用 我认为Jest称之为“手动模拟”。但是,我不想使用\uuuu mocks\uuu约定 正在测试的文件的顶部: import * as dotenvSafe from "dotenv-safe"; 手动模拟文件: const dotenvSafe: any = jest.genMockFromModule("dotenv-safe"); dotenvSafe.load = jest.fn(() => { /
\uuuu mocks\uuu
约定
正在测试的文件的顶部:
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”)代码>
不工作-正在测试的代码抛出类型错误:dotenvafe.load不是函数
jest.mock(“dotenv-safe”,()=>{return{load:jest.fn(()=>({error:undefined,parsed:[]}))};})代码>
真管用!但是mock是内联的,我想把它移动到一个单独的文件中。我不想在每个文件中重复这个
require(“../../mocks/dotenv-safe”)
等于模块导出。它是使用的默认导出,因此应为:
jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe").default);
哇!这一个词起了很大的作用,我花了好几个小时来尝试我在文档中找到的每一个组合!他们应该叫你“jestus”:)哈,很高兴这有帮助。还有另一种方法
jest.setMock(“dotenv-safe”,require(“../../mocks/dotenv-safe”)代码>是抱歉,需要默认值
-我将手动模拟更改为模块。导出
格式,因为它在消费代码中不太“令人惊讶”(不需要默认值
)。我的观点是有两种很好的方法可以做到这一点,jest.mock
和jest.setMock
。