开玩笑的模拟实现一次不覆盖手动模拟

时间:2019-09-27 06:33:19

标签: typescript mocking 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');
});

现在,当我运行此测试时,Jest似乎仍将手动模拟加载到__mocks__文件夹中,而不是为此特定测试加载该模拟。我在这里想念东西吗?

1 个答案:

答案 0 :(得分: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();
})

我认为在通话前使用mockImplementationOnce是一种好习惯,以避免在beforeEach中出现任何覆写或其他冲突。