2014-12-04 60 views
8

我在javascript中创建了window.location.reload函数。模拟茉莉花测试中的window.location.reload

我需要在茉莉花测试时模拟重载功能,因为它保持循环。

当我运行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 2014-12-05 12:14:20

回答

5

感谢您分享您的观点。

我按照建议做了一项工作,并取得了成功。由于window是一个浏览器对象,不能被窥探,所以我只是用JavaScript封装了这个函数,并在我的测试规范中提到了这个函数。

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'); 
});