Возможно, вы захотите проверить логику в своей функции debouncer:
Сказав это, звучит так, как будто ваш реальный вопрос касается тестирования неисправных функций.
Проверка исправленных функций
Вы можете проверить, отменяется ли функция, используя макет для отслеживания вызовов функций и фальшивые таймеры для имитации времени.
Вот простой пример использования Jest
фиктивной функции и Sinon
фальшивых таймеров функции, отклоненной с помощью debounce()
из Lodash
:
const _ = require('lodash');
import * as sinon from 'sinon';
let clock;
beforeEach(() => {
clock = sinon.useFakeTimers();
});
afterEach(() => {
clock.restore();
});
test('debounce', () => {
const func = jest.fn();
const debouncedFunc = _.debounce(func, 1000);
// Call it immediately
debouncedFunc();
expect(func).toHaveBeenCalledTimes(0); // func not called
// Call it several times with 500ms between each call
for(let i = 0; i < 10; i++) {
clock.tick(500);
debouncedFunc();
}
expect(func).toHaveBeenCalledTimes(0); // func not called
// wait 1000ms
clock.tick(1000);
expect(func).toHaveBeenCalledTimes(1); // func called
});