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



我在__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__文件夹中加载手动模拟,而不是为此特定测试加载此模拟。我在这里错过了什么吗?

这应该有效:

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中的任何覆盖或任何其他冲突。

最新更新