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?
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(){});
You should always use $window
instead of window
.
Try this:
$window = jasmine.createSpy('$window');
or just make your own:
$window = {location:{reload:function(){}}};
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.
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();
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');
});