@netdata/charts
Version:
Netdata frontend SDK and chart utilities
85 lines • 2.77 kB
JavaScript
import makeResizeObserver from ".";
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();
makeResizeObserver(mockElement, action, initialAction);
expect(global.ResizeObserver).toBeCalledWith(expect.any(Function));
expect(mockObserver.observe).toBeCalledWith(mockElement);
});
it("calls initialAction on first resize after delay", function () {
var action = jest.fn();
var initialAction = jest.fn();
makeResizeObserver(mockElement, action, initialAction);
observeCallback();
expect(initialAction).not.toBeCalled();
jest.advanceTimersByTime(200);
expect(initialAction).toBeCalled();
expect(action).not.toBeCalled();
});
it("calls action on subsequent resizes after delay", function () {
var action = jest.fn();
var initialAction = jest.fn();
makeResizeObserver(mockElement, action, initialAction);
observeCallback();
jest.advanceTimersByTime(200);
observeCallback();
expect(action).not.toBeCalled();
jest.advanceTimersByTime(200);
expect(action).toBeCalled();
expect(initialAction).toBeCalledTimes(1);
});
it("debounces rapid resize events", function () {
var action = jest.fn();
makeResizeObserver(mockElement, action);
observeCallback();
jest.advanceTimersByTime(200);
observeCallback();
observeCallback();
observeCallback();
jest.advanceTimersByTime(100);
expect(action).not.toBeCalled();
jest.advanceTimersByTime(200);
expect(action).toBeCalledTimes(1);
});
it("handles missing initialAction", function () {
var action = jest.fn();
makeResizeObserver(mockElement, action);
observeCallback();
jest.advanceTimersByTime(200);
expect(action).not.toBeCalled();
});
it("returns cleanup function that disconnects observer", function () {
var action = jest.fn();
var cleanup = makeResizeObserver(mockElement, action);
cleanup();
expect(mockObserver.disconnect).toBeCalled();
});
it("clears pending timeouts on cleanup", function () {
var action = jest.fn();
var cleanup = makeResizeObserver(mockElement, action);
observeCallback();
cleanup();
jest.advanceTimersByTime(300);
expect(action).not.toBeCalled();
});
});