Похоже, вы хотите смоделировать экспорт по умолчанию для do-something
и do-something-else
и проверить, что они отправляются тестируемым кодом.
Если это так, то вы можете сделать это так:
import functionToTest from 'redux/function-to-test'
jest.mock('redux/do-something', () =>
() => 'do something mock'
);
jest.mock('redux/do-something-else', () =>
() => 'do something else mock'
);
describe("functionToTest", () => {
test('my test', async () => { // <= async test function
const dispatch = jest.fn();
await functionToTest()(dispatch); // <= await the Promise
expect(dispatch.mock.calls[0][0]).toBe('do something mock'); // Success!
expect(dispatch.mock.calls[1][0]).toBe('do something else mock'); // Success!
});
});
Детали
Вы можете передать фабричную функцию модуля в качестве второго параметра в jest.mock
, а Jest
будет использовать результат вызова функции в качестве результата, возвращаемого при импорте модуля во время теста.
jest.mock
вызовы поднимаются на babel-jest
и выполняются до всего остального в файле кода. Подъем работает неправильно, если в тестовой функции определено jest.mock
, поэтому вызовы jest.mock
должны быть перемещены в область верхнего уровня тестового файла.
Тестируемая функция - async
, поэтому используйте async
тестовую функцию и await
Promise
, чтобы убедиться, что она завершилась до подтверждения.