使用$ http成功块测试角度提供程序

时间:2015-01-30 03:05:25

标签: angularjs

已修改为包含测试:

我有一个带有控制器的角度应用程序,如:

anuglar.module('myModule')
.controller('myController', ['$scope', 'myProvider', 
  function($scope, myprovider){
    $scope.api = myProvider(objectName);
    $scope.sites = $scope.api.list();
  }]);

利用下面的提供商。

angular.module('myProviders')
.provider('myProvider', function(){
  var url = 'http://localhost:3000/path/to/api';
  this.$get = ['$http', function($http){
    return function(){
      return {
        list: function(){
          var list=[];
          $http.get(url).success(function(data){
            list = data;
          });
          return list;
        }
      }
    };
  }];
});

测试:

describe('cqsdbProvider', function () {
  var mockCqsdbProvider, $httpBackend;
  beforeEach(angular.mock.module('tgr1202App'));

  beforeEach(function () {
    angular.mock.inject(function($injector){
      $httpBackend = $injector.get('$httpBackend');
      mockCqsdbProvider = $injector.get('cqsdbProvider');
    });
  });

  describe('list', function(){
    it('should get a list of sites', inject(function(cqsdbProvider){
      $httpBackend.expectGET('/path/to/api').
      respond('[{"name":"Test1"}]');

      var provider = mockCqsdbProvider();
      var thing = provider.list();
      $httpBackend.flush();
      expect(thing.length).toEqual(1);
    }));
  });
});

此代码在浏览器中的行为与预期相同,但测试失败,表示事物长度为零。我知道成功没有完成,所以空数组正在返回,我只是不知道如何告诉我的模拟器等待响应。

1 个答案:

答案 0 :(得分:2)

您的实施可能存在问题。你能试试吗

 list: function(){
          var list=[];
          $http.get(url).success(function(data){
            list.length = 0;
            list.push(data);
          });
          return list;
        }