Angularjs 角度控制器中$q.all的测试输出

Angularjs 角度控制器中$q.all的测试输出,angularjs,jasmine,Angularjs,Jasmine,我的控制器执行如下操作(请注意,为了简单起见,我没有显示所有依赖项): 在这种情况下,我很难测试是否调用了fn3()。我也无法解析fn1()和fn2(),以便测试fn3() 任何提示都将不胜感激。最终找到了解决方案。。对于感兴趣的人,请查看此plnkr: 您应该使用$httpBackend来模拟服务器不要认为$httpBackend在这里适用。。 .controller('demo',function(){ fn1(){ var defereed = $q.d

我的控制器执行如下操作(请注意,为了简单起见,我没有显示所有依赖项):

在这种情况下,我很难测试是否调用了fn3()。我也无法解析fn1()和fn2(),以便测试fn3()


任何提示都将不胜感激。

最终找到了解决方案。。对于感兴趣的人,请查看此plnkr:


您应该使用$httpBackend来模拟服务器不要认为$httpBackend在这里适用。。
.controller('demo',function(){

      fn1(){
          var defereed = $q.defer;
          /* fetch data from server and once the data is fetched perform a resolve */
          return deferred.promise;
      }

     fn2(){
        var defereed = $q.defer;
          /* fetch data from server and once the data is fetched perform a resolve*/      
          return deferred.promise;
     }

     fun3() { /*makes some server side calls and updates the view*/}

     $q.all([fn1(),fn2()] .then(function(result){
           if (result[0]) { fn3();}
       });

    }
describe('Testing: MainCtrl', function() {
  var $scope = null;
  var ctrl = null;
  var mockInitService;
  var defer1,defer2;
  var $q;

  beforeEach(module('plunker'));

  beforeEach(inject(function($rootScope, $controller,$q) {
    $scope = $rootScope.$new();
    $q = $q;

    mockInitService = {
      fn1: function(){},
      fn2: function(){},
      fn3: function(){}
    };
    defer1 = $q.defer();
    defer2 = $q.defer();

    spyOn(mockInitService,'fn1').and.returnValue(defer1.promise);
    spyOn(mockInitService,'fn2').and.returnValue(defer2.promise);
    spyOn(mockInitService,'fn3');

    createController = function() {
      return $controller('MainCtrl', {
        $scope: $scope,
        InitService: mockInitService
      });
    }

  }));

  it('Should call InitService.fn3', function() {
    ctrl = createController();
    defer1.resolve();
    defer2.resolve();
    $scope.$digest();
    expect(mockInitService.fn3).toHaveBeenCalled();
  });

});