git.fiddlerwoaroof.com
src/history-events.test.js
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);
 
 });