debian-mirror-gitlab/spec/frontend/helpers/set_window_location_helper.js
2020-05-25 16:23:42 +05:30

40 lines
816 B
JavaScript

/**
* setWindowLocation allows for setting `window.location`
* (doing so directly is causing an error in jsdom)
*
* Example usage:
* assert(window.location.hash === undefined);
* setWindowLocation('http://example.com#foo')
* assert(window.location.hash === '#foo');
*
* More information:
* https://github.com/facebook/jest/issues/890
*
* @param url
*/
export default function setWindowLocation(url) {
const parsedUrl = new URL(url);
const newLocationValue = [
'hash',
'host',
'hostname',
'href',
'origin',
'pathname',
'port',
'protocol',
'search',
].reduce(
(location, prop) => ({
...location,
[prop]: parsedUrl[prop],
}),
{},
);
Object.defineProperty(window, 'location', {
value: newLocationValue,
writable: true,
});
}