正在尝试将模块导入返回到其原始/默认mock



在我的测试文件中,我有一个mocks文件夹,其中加载了导出的函数。通常,我只会使用mocks文件夹来完成所有工作,但有一种情况下,我需要更改返回值以满足另一个函数的需要,我不知道如何将其恢复到原始/默认mock。

以下面的例子为例。

// __mocks__/user.ts
export default someModuleFunction = () => {
return 'default mock'
}
// user.test.ts
import {someModuleFunction} from 'user';
jest.mock('../users')
describe("TestFile", () => {
it("should mock the return value in here", () => {
(someModuleFunction as jest.Mock) = jest.fn().mockReturnValue(null)
expect(someModuleFunction).toEqual(null)
})

it("should fallback to the original default mock", async() => {
expect(someModuleFunction).toEqual('default mock')
})
})

分配给someModuleFunction是一个错误,因为ES模块是只读的,这只是因为它们被转换到CommonJS。应该恢复的模拟永远不应该通过重新分配来完成。一个更好但仍然不正确的方法是导入*并在其上使用spyOn

对于隔离模块来说就是这样,每次测试都需要重新导入一个模块:

it("should mock the return value in here", () => {
jest.isolatedModules(() => {
jest.doMock('user', () => /* mock it */);
const {someModuleFunction} = require('user'); // mocked
/* require modules that depend on this mock */
});
})

最新更新