@netdata/charts
Version:
Netdata frontend SDK and chart utilities
61 lines • 2.06 kB
JavaScript
import makeExecuteLatest from ".";
describe("makeExecuteLatest", function () {
var executeLatest;
beforeEach(function () {
executeLatest = makeExecuteLatest();
jest.useFakeTimers();
});
afterEach(function () {
jest.useRealTimers();
});
it("executes callback after timeout", function () {
var callback = jest.fn();
var execute = executeLatest.add(callback);
execute("arg1", "arg2");
expect(callback).not.toHaveBeenCalled();
jest.runAllTimers();
expect(callback).toHaveBeenCalledWith("arg1", "arg2");
});
it("cancels previous timeout when called again", function () {
var callback = jest.fn();
var execute = executeLatest.add(callback);
execute("first");
execute("second");
jest.runAllTimers();
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith("second");
});
it("handles multiple execute functions", function () {
var callback1 = jest.fn();
var callback2 = jest.fn();
var execute1 = executeLatest.add(callback1);
var execute2 = executeLatest.add(callback2);
execute1("first");
execute2("second");
jest.runAllTimers();
expect(callback1).toHaveBeenCalledWith("first");
expect(callback2).toHaveBeenCalledWith("second");
});
it("clears all pending timeouts", function () {
var callback1 = jest.fn();
var callback2 = jest.fn();
var execute1 = executeLatest.add(callback1);
var execute2 = executeLatest.add(callback2);
execute1("first");
execute2("second");
executeLatest.clear();
jest.runAllTimers();
expect(callback1).not.toHaveBeenCalled();
expect(callback2).not.toHaveBeenCalled();
});
it("clears previous timeout before setting new one", function () {
var callback = jest.fn();
var execute = executeLatest.add(callback);
execute("first");
var firstTimeoutId = setTimeout(function () {}, 0);
execute("second");
jest.runAllTimers();
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith("second");
});
});