Jest mockImplementationOnce 不覆盖手动模拟

tmp*_*dev 5 mocking typescript jestjs

我在文件夹内有一个手动模拟__mocks__,名为client.ts. 现在在我的单元测试中我调用jest.mock('./client'). 这工作正常,笑话导入模拟文件夹。现在我有一个场景(测试),我需要重写此行为。我mockImplementationOnce在单元测试中使用过。

import mockClient from './client';
(mockClient.getObject as jest.Mock).mockImplementationOnce(() => {
  console.log('calling the mock of the mock');
  return Promise.resolve('abcde');
});
Run Code Online (Sandbox Code Playgroud)

现在,当我运行此测试时,Jest 似乎仍然在文件夹内加载手动模拟,__mocks__而不是为此特定测试加载此模拟。我在这里错过了什么吗?

Dan*_*rín 0

这应该有效:

import mockClient from './client';

test('getObject', async () => {
   mockClient.getObject.mockImplementationOnce(() => {
     console.log('calling the mock of the mock');
     return Promise.resolve('abcde');
   });

   await mockClient.getObject();
})
Run Code Online (Sandbox Code Playgroud)

mockImplementationOnce我认为在调用之前使用是一个很好的做法,以避免任何覆盖beforeEach或任何其他冲突。