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

问题描述 投票:14回答:4

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

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

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

这是我的代码片段。

使用Javascript:

window.location.reload();

茉莉花测试:

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

有人可以帮我这个吗?

mocking jasmine window.location
4个回答
9
投票

感谢您分享您的观点。

我按照建议做了一个工作,但它很成功。

由于window是一个浏览器对象,无法监视,我只是用JavaScript包装了该函数,并在我的测试规范中引用了该函数。

Javascript代码:

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

在需要的地方调用函数windowReload()

茉莉花测试:

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

2
投票

你应该总是使用$window而不是window

试试这个:

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

或者只是制作自己的:

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

0
投票

我刚遇到同样的问题。 window.location =''在浏览器中运行时导致inf循环。一个简单的解决方案是设置window.location ='#'来停止重新加载。


-1
投票

你可以随时做:

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

分别:

beforeAll(() => {
  window.onbeforeunload = () => console.log('Mock redirect');
  window.open = () => console.log('Mock redirect');
});
© www.soinside.com 2019 - 2024. All rights reserved.