我有这个功能
import _ from 'underscore';
const configMap = {};
export function someFunctionName(someValue, dispatch, reduxAction) {
if (!configMap[someValue]) {
configMap[someValue] = _.debounce(
(someValue) => dispatch(reduxAction(someValue)),
1000,
);
}
return configMap[someValue];
}
开玩笑测试:
const dispatchMock = jest.fn();
const reduxAction = jest.fn().mockReturnValue({});
jest.useFakeTimers();
describe('someFunctionName', () => {
it('should dispatch reduxAction', async () => {
someFunctionName('value', dispatchMock, reduxAction);
jest.runAllTimers();
expect(reduxAction).toHaveBeenCalled();
});
});
测试一直失败,我不知道为什么。我最初认为这可能是去反跳方法需要一个模拟,但这似乎并不能解决它。
1条答案
按热度按时间yc0p9oo01#
Lodash的
debounce
函数是异步的,这意味着someFunctionName
的返回语句将在debounce
返回值之前执行。此外,debounce
内部的函数将在提供的1000ms等待时间过去之后才运行。您需要添加异步逻辑,以便在返回之前等待
someFunctionName
中debounce
的结果。This SO post可能会提供有关如何实现此操作的进一步帮助。