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

Best way to override auto-mocks?

我需要自动模拟所有模块功能,除了那些我想手动模拟的功能。 我想使用 jest.mock() 的工厂参数来执行此操作,类比来自 jest docs (https://jestjs.io/docs/jest-object#jestrequireactualmodulename) 的示例,如下所示:

jest.mock('someModule', () => ({
  ...jest.requireMock('someModule'), // This doesn't work :(
  someFunction: jest.fn(() => 'someValue')
}));

我希望 jest.requireMock(moduleName) 能像 jest.requireActual(moduleName) 那样做,但结果是 RangeError: Maximum call stack size exceeded

是否可以通过这种方式实现我的目标? 如果不是,这样做的最佳做法是什么?

开玩笑:24.9.0,ts-开玩笑:26.4.1

jest.mock要么是自动要么是手动,不能两者都是。

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

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

jest.mock('someModule');

beforeEach(() => {
  someModule.someFunction.mockReturnValue('someValue')
});

I expect jest.requireMock(moduleName) to do the trick

这不应该是预期的,因为模拟是在模拟中导入的,这会导致递归。