问题
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?
回答1:
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(){});
回答2:
You should always use $window
instead of window
.
Try this:
$window = jasmine.createSpy('$window');
or just make your own:
$window = {location:{reload:function(){}}};
回答3:
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.
回答4:
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');
});
来源:https://stackoverflow.com/questions/27306194/mock-window-location-reload-in-jasmine-testing