【问题标题】:Mock window.location.reload in Jasmine testing在 Jasmine 测试中模拟 window.location.reload
【发布时间】:2014-12-04 23:33:25
【问题描述】:

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

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

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

这是我的代码 sn-p。

Javascript:

window.location.reload();

茉莉花测试:

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

谁能帮我解决这个问题?

【问题讨论】:

标签: mocking jasmine window.location


【解决方案1】:

您应该始终使用$window 而不是window

试试这个:

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

或者自己制作:

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

【讨论】:

    【解决方案2】:

    感谢您分享您的观点。

    我按照建议进行了解决,并且成功了。

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

    Javascript 代码:

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

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

    茉莉花测试:

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

    【讨论】:

    • 这个函数应该是私有的。然后你不测试它。绕圈跑……
    【解决方案3】:

    你总是可以这样做的:

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

    分别:

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

    【讨论】:

      【解决方案4】:

      这对我在与 Jamine 的 BeforeEach 中很有效

      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();
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-13
          • 2013-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多