Reputation: 369
I have created a window.location.reload
function in my javascript.
I need to mock the reload function while testing in Jasmine since it keeps on looping.
The test goes well when I run grunt jenkins
. But not while testing in the browser (mozilla/chrome).
Here is my code snippet.
Javascript:
window.location.reload();
Jasmine Test:
spyOn(window.location, 'reload').and.callFake(function(){});
Can anyone please help me on this?
Upvotes: 21
Views: 41746
Reputation: 1781
This worked for me in BeforeEach with Jamine
delete window.location;
window.location = Object.create(window);
window.location.reload = () => {};
spyOn(window.location, 'reload');
and this worked using Jest
delete window.location;
window.location = Object.create(window);
window.location.reload = jest.fn();
Upvotes: -3
Reputation: 391
I just meet the same issue. window.location = '' cause inf loop while run in browser. A simple solution is set window.location = '#' to stop reload.
Upvotes: 0
Reputation: 1738
You can always do:
beforeAll(() => {
window.reload = () => console.log('Mock redirect');
});
Respectively:
beforeAll(() => {
window.onbeforeunload = () => console.log('Mock redirect');
window.open = () => console.log('Mock redirect');
});
Upvotes: -3
Reputation: 369
Thanks for sharing your views.
I did a work around as suggested and it was successful.
Since window is a browser object and cannot be spied upon, I just wrapped the function in JavaScript and referred that function in my test spec.
Javascript code:
var function = windowReload(){
window.location.reload();
}
call the function windowReload()
where required.
Jasmine Test:
spyOn(obj, 'windowReload').andCallFake(function(){});
Upvotes: 15
Reputation: 3489
You should always use $window
instead of window
.
Try this:
$window = jasmine.createSpy('$window');
or just make your own:
$window = {location:{reload:function(){}}};
Upvotes: 2