30db14b1 |
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);
});
|