@netdata/charts
Version:
Netdata frontend SDK and chart utilities
88 lines (87 loc) • 2.95 kB
JavaScript
;
var _ = _interopRequireDefault(require("."));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
describe("makeResizeObserver", function () {
var mockElement;
var mockObserver;
var observeCallback;
beforeEach(function () {
jest.useFakeTimers();
mockElement = {};
mockObserver = {
observe: jest.fn(),
disconnect: jest.fn()
};
global.ResizeObserver = jest.fn(function (callback) {
observeCallback = callback;
return mockObserver;
});
});
afterEach(function () {
jest.useRealTimers();
jest.restoreAllMocks();
});
it("creates and observes element", function () {
var action = jest.fn();
var initialAction = jest.fn();
(0, _["default"])(mockElement, action, initialAction);
expect(global.ResizeObserver).toHaveBeenCalledWith(expect.any(Function));
expect(mockObserver.observe).toHaveBeenCalledWith(mockElement);
});
it("calls initialAction on first resize after delay", function () {
var action = jest.fn();
var initialAction = jest.fn();
(0, _["default"])(mockElement, action, initialAction);
observeCallback();
expect(initialAction).not.toHaveBeenCalled();
jest.advanceTimersByTime(200);
expect(initialAction).toHaveBeenCalled();
expect(action).not.toHaveBeenCalled();
});
it("calls action on subsequent resizes after delay", function () {
var action = jest.fn();
var initialAction = jest.fn();
(0, _["default"])(mockElement, action, initialAction);
observeCallback();
jest.advanceTimersByTime(200);
observeCallback();
expect(action).not.toHaveBeenCalled();
jest.advanceTimersByTime(200);
expect(action).toHaveBeenCalled();
expect(initialAction).toHaveBeenCalledTimes(1);
});
it("debounces rapid resize events", function () {
var action = jest.fn();
(0, _["default"])(mockElement, action);
observeCallback();
jest.advanceTimersByTime(200);
observeCallback();
observeCallback();
observeCallback();
jest.advanceTimersByTime(100);
expect(action).not.toHaveBeenCalled();
jest.advanceTimersByTime(200);
expect(action).toHaveBeenCalledTimes(1);
});
it("handles missing initialAction", function () {
var action = jest.fn();
(0, _["default"])(mockElement, action);
observeCallback();
jest.advanceTimersByTime(200);
expect(action).not.toHaveBeenCalled();
});
it("returns cleanup function that disconnects observer", function () {
var action = jest.fn();
var cleanup = (0, _["default"])(mockElement, action);
cleanup();
expect(mockObserver.disconnect).toHaveBeenCalled();
});
it("clears pending timeouts on cleanup", function () {
var action = jest.fn();
var cleanup = (0, _["default"])(mockElement, action);
observeCallback();
cleanup();
jest.advanceTimersByTime(300);
expect(action).not.toHaveBeenCalled();
});
});