代码之家  ›  专栏  ›  技术社区  ›  IceMetalPunk

单元测试AngularJS$HTTP事件处理程序与Jasmine/Karma?

  •  0
  • IceMetalPunk  · 技术社区  · 7 年前

    我使用的是AngularJS 1.5.8,我有一个工厂,其中有一个方法返回$HTTP请求的实例。它包括一个进步 eventHandler . 我的问题是,如何使用Jasmine/Karma测试这个事件处理程序?通常,请求通过 $httpBackend.expectPOST 或类似,但不会激发进度事件。如果我不模仿它,业力会抱怨一个意想不到的请求。我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  0
  •   IceMetalPunk    6 年前

    我知道了。这样做的方法是使用AngularJS装饰器扩展$httpbackend,从而能够截获对后端的调用,记录传递给它们的处理程序,并委托给原始对象:

        var httpDecorator = function($delegate) {
        $delegate.eventHandlers = [];
        var newBackend = function() {
          $delegate.eventHandlers.push(arguments[8]);
          return $delegate.apply(null, arguments);
        };
        angular.forEach($delegate, function(value, key) {
          if ($delegate.hasOwnProperty(key)) {
            newBackend[key] = value;
          }
        });
        return newBackend;
      };
      $provide.decorator('$httpBackend', ['$delegate', httpDecorator]);
    

    把它放在 module(...) A中的定义 beforeEach(...) 回拨,现在我可以参考 $httpBackend.eventHandlers 在我的单元测试中,获取对所有测试的引用:)

    推荐文章