我在javascript中创建了window.location.reload
函数。
我需要在Jasmine中测试时模拟重载函数,因为它一直在循环。
当我运行grunt jenkins
时,测试进展顺利。但不是在浏览器中测试时(mozilla / chrome)。
这是我的代码段。
使用Javascript:
window.location.reload();
茉莉花测试:
spyOn(window.location, 'reload').and.callFake(function(){});
有人可以帮我吗?
答案 0 :(得分:9)
感谢您分享您的观点。
我按照建议完成了一项工作并取得了成功。
由于window是一个浏览器对象,无法进行监视,我只是将该函数包装在JavaScript中,并在我的测试规范中引用该函数。
Javascript代码:
var function = windowReload(){
window.location.reload();
}
在必要时调用函数windowReload()
。
茉莉花测试:
spyOn(obj, 'windowReload').andCallFake(function(){});
答案 1 :(得分:2)
您应始终使用$window
代替window
。
试试这个:
$window = jasmine.createSpy('$window');
或者只是制作自己的:
$window = {location:{reload:function(){}}};
答案 2 :(得分:0)
我只是遇到了同样的问题。 window.location =''在浏览器中运行时导致inf循环。 一个简单的解决方案是将window.location ='#'设置为停止重新加载。
答案 3 :(得分:0)
这对我与Jamine一起使用之前的工作
delete window.location;
window.location = Object.create(window);
window.location.reload = () => {};
spyOn(window.location, 'reload');
并且这在Jest中起作用
delete window.location;
window.location = Object.create(window);
window.location.reload = jest.fn();
答案 4 :(得分:-1)
你总是可以这样做:
beforeAll(() => {
window.reload = () => console.log('Mock redirect');
});
分别为:
beforeAll(() => {
window.onbeforeunload = () => console.log('Mock redirect');
window.open = () => console.log('Mock redirect');
});