Natsathorn
Natsathorn

Reputation: 1528

Specify window.location for each test file for Jest

I am upgrading to Jest 22 and I got some problem about mocking window.location. In past, this method is work fine but not work after upgraded.

Object.defineProperty(window.location, 'href', {
    writable: true,
    value: 'https://example.com/abc',
});

I have read over Jest documentation, there is a way to mock window.location in package.json as a config like this.

"jest": {
    "testURL": "https://example.com/home"
}

This is work fine in case all tests use the same URL.

Is there any way I can mock window.location.href inside the test file.

I'm using

"@types/jest": "^22.2.3",
"jest": "^22.4.3",
"@types/enzyme": "^3.1.10",
"enzyme": "^3.3.0",

Update

Here is usage of window.location inside my components

const currentPage = window.location.href.match(/([^\/]*)\/*$/)[1];

Upvotes: 9

Views: 17644

Answers (2)

serv-inc
serv-inc

Reputation: 38177

Solution from jest collaborator for June 2019:

delete global.window.location;
global.window = Object.create(window);
global.window.location = {
  port: '123',
  protocol: 'http:',
  hostname: 'localhost',
}

Upvotes: 13

Andreas Köberle
Andreas Köberle

Reputation: 110922

There is no really nice way at the moment. As we use react-router I dent to use it for all url changes and mock it in the tests. If you don't use react-router just create a location module like this:

export default (location) => window.location = location 

that can be easily mocked in the test

Upvotes: 0

Related Questions