2014-12-04 4 views
8

Я создал функцию window.location.reload в своем javascript.Mock window.location.reload in Jasmine testing

Мне нужно высмеять функцию перезагрузки при тестировании в жасмине, так как он продолжает цикл.

Тест проходит хорошо, когда я запускаю grunt jenkins. Но не во время тестирования в браузере (mozilla/chrome).

Вот мой фрагмент кода.

Javascript:

window.location.reload(); 

Жасмин Тест:

spyOn(window.location, 'reload').and.callFake(function(){}); 

Может кто-нибудь, пожалуйста, помогите мне в этом?

+2

'window.location.reload' не является возможностью записи, поэтому браузер не позволит шпиону переопределить его. Чтобы обойти это, см. Http://stackoverflow.com/questions/8919370/jasmine-mock-window-object – user2943490

ответ

5

Спасибо, что поделились своими взглядами.

Я сделал работу, как было предложено, и это было успешно.

Поскольку окно является объектом-обозревателем и не может быть проверено, я просто завернул функцию в JavaScript и передал эту функцию в свой тестовый spec.

код Javascript:

var function = windowReload(){ 
    window.location.reload(); 
} 

вызов функции windowReload(), где требуется.

Жасмин Тест:

spyOn(obj, 'windowReload').andCallFake(function(){}); 
-1

Вы должны всегда использовать $window вместо window.

Попробуйте это:

$window = jasmine.createSpy('$window'); 

или просто сделать свой собственный:

$window = {location:{reload:function(){}}}; 
0

Вы всегда можете сделать:

beforeAll(() => { 
    window.reload =() => console.log('Mock redirect'); 
}); 

Соответственно:

beforeAll(() => { 
    window.onbeforeunload =() => console.log('Mock redirect'); 
    window.open =() => console.log('Mock redirect'); 
});