// Jest 26 with latest JSDOM prevents location from being proxied | |
// Instead we can redefine location on window, and then restore. | |
export function mockWindowLocation( | |
mockLocation: Partial<Location> = { | |
href: '', | |
assign: jest.fn(), | |
reload: jest.fn(), | |
} | |
) { | |
const savedLocation = window.location; | |
beforeEach(() => { | |
Object.defineProperty(window, 'location', { | |
writable: true, | |
value: mockLocation, | |
}); | |
}); | |
afterEach(() => { | |
window.location = savedLocation; | |
}); | |
return (mockLocation: Partial<Location>) => { | |
Object.defineProperty(window, 'location', { | |
writable: true, | |
value: mockLocation, | |
}); | |
}; | |
} |