去抖功能的Jest测试未通过

3mpgtkmj  于 2022-12-08  发布在  Jest
关注(0)|答案(1)|浏览(179)

我有这个功能

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();
  });
});

测试一直失败,我不知道为什么。我最初认为这可能是去反跳方法需要一个模拟,但这似乎并不能解决它。

yc0p9oo0

yc0p9oo01#

Lodash的debounce函数是异步的,这意味着someFunctionName的返回语句将在debounce返回值之前执行。此外,debounce内部的函数将在提供的1000ms等待时间过去之后才运行。
您需要添加异步逻辑,以便在返回之前等待someFunctionNamedebounce的结果。This SO post可能会提供有关如何实现此操作的进一步帮助。

相关问题