Jestjs 覆盖自动模拟的最佳方法?

Jestjs 覆盖自动模拟的最佳方法?,jestjs,ts-jest,Jestjs,Ts Jest,我需要所有的模块功能自动模拟除了那些我想手动模拟。 我想使用jest.mock()的factory参数来实现这一点,类似于jest docs()中的一个示例,如下所示: jest.mock('someModule', () => ({ ...jest.requireMock('someModule'), // This doesn't work :( someFunction: jest.fn(() => 'someValue') })); 我希望jest.requireM

我需要所有的模块功能自动模拟除了那些我想手动模拟。 我想使用jest.mock()的factory参数来实现这一点,类似于jest docs()中的一个示例,如下所示:

jest.mock('someModule', () => ({
  ...jest.requireMock('someModule'), // This doesn't work :(
  someFunction: jest.fn(() => 'someValue')
}));
我希望jest.requireMock(moduleName)能像jest.requireActual(moduleName)那样做,但最终会
RangeError:超过最大调用堆栈大小

有可能以这种方式实现我的目标吗? 如果没有,那么这样做的最佳实践是什么


jest:24.9.0,ts jest:26.4.1

jest.mock
是自动或手动的,不能两者都是

可以使用
jest.createMockFromModule
创建自动模拟,然后进行扩展。这在
中的可重用模拟中很有用,但在测试级别通常不需要

除非在导入时使用模拟并需要托管,否则每个测试套件执行此操作的方法是:

jest.mock('someModule');

beforeEach(() => {
  someModule.someFunction.mockReturnValue('someValue')
});
我希望jest.requireMock(moduleName)能做到这一点


这是意料之中的,因为模拟是在模拟内部导入的,这会导致递归。

非常感谢!在我的示例中,将
jest.requireMock
替换为
jest.createMockFromModule
会有所帮助。有时,从自动模拟切换到实际数据是很方便的,反之亦然,示例中的方法允许通过单行更改来实现这一点。