Из jest.mock
doc :
Проверяет модуль с автоматически смоделированной версией, когда это требуется.
Документы, вероятно, можно было бы улучшить с помощью лучшего описания того, что означает «автоматически смоделированная версия», но происходит то, что Jest
сохраняет поверхность API модуля неизменной, заменяя реализацию пустыми фиктивными функциями .
Таким образом, в этом случае вызывается execute
, но он был заменен пустой фиктивной функцией, поэтому requestInfo
никогда не вызывается, что приводит к сбою теста.
Чтобы сохранить реализацию execute
нетронутой, вы должны избегать автоматической насмешки всего модуля и вместо этого шпионить за исходной функцией с помощью чего-то вроде jest.spyOn
:
var myLib = require('./mylib.js');
test('', () => {
jest.spyOn(myLib, 'execute'); // spy on execute
jest.spyOn(myLib, 'requestInfo') // spy on requestInfo...
.mockImplementation(() => {}); // ...and optionally replace the implementation
myLib.execute('requestInfo', 'Ferrari', '14523');
expect(myLib.execute.mock.calls.length).toBe(1); // SUCCESS
expect(myLib.requestInfo.mock.calls.length).toBe(1); // SUCCESS
});