Jest mockImplementationOnce не перекрывая ручной макет - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть ручной макет в папке __mocks__, который называется client.ts.Сейчас в моем модульном тесте я звоню jest.mock('./client').Это работает нормально, и Jest импортирует макет папки.Теперь у меня есть один сценарий (тест), где мне нужно переопределить это поведение.Я использовал 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 голосов
/ 27 сентября 2019

Это должно работать:

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 или любого другого конфликта.

...