Mock window.location in Jest
#mock#test#jest#window#location#javascript
Mocking or writing over global objects in Jest
might result in side effects that stays throughout the tests that are run from the same file.
In other words, test A
might addEventListener
to the window
object and test B
will be affected with the same event listeners. Here's how to safely writing over global objects in Jest through beforeEach
.
describe("Module", () => {
const { location } = window;
beforeAll(() => {
delete window.location;
window.location = {};
Object.defineProperty(window.location, "href", {
get: getHref,
set: setHref,
});
});
afterAll(() => {
window.location = location;
});
it("redirects to another URL", () => {
window.location.href = "https://jonas.arnklint.com";
expect(setHref).toHaveBeenCalledWith("https://jonas.arnklint.com");
expect(getHref).not.toHaveBeenCalled();
});
it("reads from window.location", () => {
console.log(window.location.href);
expect(getHref).toHaveBeenCalled();
});
});
I'm currently working on the Hotlight, a command palette for the web. Much like Spotlight or Albert. Basically I want to build a tool for anyone to offer their users a great simple way to navigate their web app or site. Please follow along if you wish to learn more snippets like the one above!