【问题标题】:stubbing `window.location.reload` for unit tests - "Some of your tests did a full page reload!"为单元测试存根`window.location.reload` - “你的一些测试做了整页重新加载!”
【发布时间】:2017-12-18 21:23:19
【问题描述】:

我在控制器中有这个:

   $scope.foo = function(){
      return RolesService.remove({
        data: role
      })
      .then(function (v) {
        if (!(v && v.cdtError)) {
          $window.location.reload();
        }
      });
    }

$window 被注入到控制器中

然后在我的单元测试中:

 let $window = {location: {reload: sinon.spy()}};

  module(function ($provide) {
    $provide.value('$window', $window);
    $window.onbeforeunload = sinon.spy();
  });

上面的存根似乎没有做任何事情,因为我仍然得到这个错误:

您的一些测试重新加载了整个页面!

我如何存根 window.location.reload 以免发生这种情况?

我在 Karma Github 问题跟踪器上看到了一些内容,但我找不到答案。

【问题讨论】:

  • 也许我在错误的地方调用module(),我应该把它放在beforeEach 钩子里吗?

标签: javascript angularjs unit-testing karma-runner


【解决方案1】:

这似乎可以解决问题:

beforeEach(function(){
    angular.mock.module('app', function ($provide) {
      let $window = {location: {reload: sinon.spy()}};
      $provide.value('$window', $window);
      $window.onbeforeunload = sinon.spy();
    });
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2021-10-07
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多