import addMissingHistoryEvents from "./history-events"; it("should overwrite pushstate and replacestate with event-emitting functions", () => { // given const pushState = jest.fn(); const replaceState = jest.fn(); const window = { dispatchEvent: jest.fn(), history: { pushState, replaceState } }; // when addMissingHistoryEvents(window, window.history); window.history.pushState({ item: "push" }, "pushstate", "/pushstate"); window.history.replaceState( { item: "replace" }, "replacestate", "/replacestate" ); //then expect(pushState.mock.calls).toEqual([ [{ item: "push" }, "pushstate", "/pushstate"] ]); expect(replaceState.mock.calls).toEqual([ [{ item: "replace" }, "replacestate", "/replacestate"] ]); expect(window.dispatchEvent.mock.calls.length).toEqual(2); const windowCalls = window.dispatchEvent.mock.calls; expect(windowCalls[0][0].detail).toEqual({ state: { item: "push" }, title: "pushstate", url: "/pushstate" }); expect(windowCalls[1][0].detail).toEqual({ state: { item: "replace" }, title: "replacestate", url: "/replacestate" }); }); it("should only add history-events once if called any number of times on same objects", () => { // given const pushState = jest.fn(); const replaceState = jest.fn(); const window = { dispatchEvent: jest.fn(), history: { pushState, replaceState } }; // when addMissingHistoryEvents(window, window.history); addMissingHistoryEvents(window, window.history); addMissingHistoryEvents(window, window.history); addMissingHistoryEvents(window, window.history); window.history.pushState({ item: "push" }, "pushstate", "/pushstate"); window.history.replaceState( { item: "replace" }, "replacestate", "/replacestate" ); //then expect(window.dispatchEvent.mock.calls.length).toEqual(2); });