У меня есть функция rateLimit
(это просто модифицированная версия этого кода ):
function rateLimit(func, wait) {
var timeout;
return function () {
var context = this;
var args = arguments;
var later = function () {
timeout = null;
func.apply(context, args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
Эта функция прекрасно работает в моем приложении, поэтому я вполне уверен, что реализация в порядке. Однако следующий тест не пройден:
jest.useFakeTimers();
test('rateLimit', () => {
const action = jest.fn();
const doAction = rateLimit(action, 100);
doAction(); // This should increment the call count
doAction(); // This shouldn't, because 100ms hasn't elapsed yet
jest.advanceTimersByTime(101);
doAction(); // This should increment the count again
expect(action).toHaveBeenCalledTimes(2);
});
С ошибкой:
Expected mock function to have been called two times, but it was called one time.
Вот исполняемая версия этого кода на repl.it .
Что я здесь не так делаю?