javascript - 去抖功能的开 Jest 单元测试

标签 javascript unit-testing jestjs debouncing

我正在尝试为 debounce 函数编写单元测试。我很难考虑。

这是代码:

function debouncer(func, wait, immediate) {
  let timeout;

  return (...args) => {
    clearTimeout(timeout);

    timeout = setTimeout(() => {
      timeout = null;
      if (!immediate) 
        func.apply(this, args);
    }, wait);

    if (immediate && !timeout) 
      func.apply(this, args);
  };
}

我应该如何开始?

最佳答案

实际上,您不需要使用 Sinon 来测试去抖动。 Jest 可以在 JavaScript 代码中模拟所有计时器。

查看以下代码(它是 TypeScript,但您可以轻松地将其转换为 JavaScript):

import * as _ from 'lodash';

// Tell Jest to mock all timeout functions
jest.useFakeTimers();

describe('debounce', () => {

    let func: jest.Mock;
    let debouncedFunc: Function;

    beforeEach(() => {
        func = jest.fn();
        debouncedFunc = _.debounce(func, 1000);
    });

    test('execute just once', () => {
        for (let i = 0; i < 100; i++) {
            debouncedFunc();
        }

        // Fast-forward time
        jest.runAllTimers();

        expect(func).toBeCalledTimes(1);
    });
});

更多信息: Timer Mocks

关于javascript - 去抖功能的开 Jest 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52224447/

相关文章:

javascript - 谷歌图表将查询结果传递给谷歌图表

javascript - 如果元素不等于这些,则执行此操作

javascript - 通过 $.post 发送多维数组

rxjs - 在 RxJS observable 的 subscribe() 中,Jest 没有处理来自 expect() 的错误

javascript - 开 Jest , enzyme - 测试返回 jsx 的方法

javascript - 按字符对字符串进行排序

c# - 单元测试验证规则

c# - 将 Entity Framework Core 3.1 与 ServiceProvider 中的 UseInMemoryDatabase 选项一起使用(范围生命周期)

c++ - 死亡测试时错误的函数调用评估

javascript - Jest 等同于 RSpec 惰性评估变量 (let)?