UNPKG

@netdata/charts

Version:

Netdata frontend SDK and chart utilities

85 lines 2.77 kB
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(); }); });