你如何用玩笑嘲笑lodash debounce.cancel?

时间:2019-03-25 19:40:57

标签: mocking jestjs lodash debounce

正在寻找有关如何在lodash的反跳中模拟debounce方法的建议。

我有一个函数,该函数先调用debouncedThing.cancel(),然后再利用返回的去抖动值来调用debounce

我可以在测试中模拟.cancel(),但在我的函数被称为jest.mock('lodash/debounce', () => fn => fn));时除外。

我目前正在进行单元测试的顶部:

debouncedThing.cancel()

除了在我打电话给debouncedThing.cancel()的地方以外,上述模拟都工作正常。在那些测试中,我得到一个错误,指出const debouncedThing = debounce( (myFunc, data) => myFunc(data), DEBOUNCE_DELAY_TIME, ); const otherFunc = () => { /* omitted */ debouncedThing.cancel(); } 不是一个函数。

我在哪里使用去抖动的伪代码如下:

output$Slider<-renderUI({
  date_of_month<-as.numeric(format(as.Date(order$Date.Ordered), input$interval)) 
  sliderInput("date_range", "Date Range", min = 2,
              max = max(date_of_month), value = max(date_of_month)
              ,step = 1
              ,animate = animationOptions(loop = TRUE, interval = 5000))
})

1 个答案:

答案 0 :(得分:0)

您只需将cancel函数添加到fn

jest.mock('lodash/debounce', () => fn => {
  fn.cancel = jest.fn();
  return fn;
});

使用示例:

const debounce = require('lodash/debounce');

test('debouncedThing', () => {
  const thing = jest.fn();
  const debouncedThing = debounce(thing, 1000);

  debouncedThing('an arg');
  expect(thing).toHaveBeenCalledWith('an arg');  // Success!

  debouncedThing.cancel();  // no error
  expect(debouncedThing.cancel).toHaveBeenCalled();  // Success!
});