在Jasmine测试中模拟window.location.reload

时间:2014-12-04 23:33:25

标签: mocking jasmine window.location

我在javascript中创建了window.location.reload函数。

我需要在Jasmine中测试时模拟重载函数,因为它一直在循环。

当我运行grunt jenkins时,测试进展顺利。但不是在浏览器中测试时(mozilla / chrome)。

这是我的代码段。

使用Javascript:

window.location.reload();

茉莉花测试:

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

有人可以帮我吗?

5 个答案:

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