2017-09-04 61 views
0

我正在测试一个服务功能,该功能会拨打众多$http.get()调用。被测实际功能返回一个承诺。目前,该测试未通过response is undefined无法读取角度业务测试中未定义的属性

下面是测试:

it('should return the list of catalogues', inject(function ($q, bookService) { 
    var list; 
    var deferred = $q.defer(); 
    var promise = deferred.promise; 

    promise.then(function (response) { 
     list = response.success; // Cannot read property 'success' of undefined 
    }); 

    bookService.getCatalogues().then(function (response) { 
     deferred.resolve(response); // this line is hit first 
    }); 

    $httpBackend.flush(); 

    expect(list).toEqual(listOfBooks); // listOfBooks is defined outside test 
})); 

我在做什么错?

+0

你确保响应对象包含一个成功的财产? –

+0

这两个函数中的响应参数都为空。 –

回答

0

基于this后我已经解决了我的问题,下面的代码(请原谅背景下,从书到用户的变更):

describe('user-service', function() { 
     var $httpBackend, $q, $rootScope; 
     var mockUserData = { "d": { "firstName": "Matt", "lastName": "Lenny" }; 

     beforeEach(module('users')); 

     beforeEach(inject(function (_$httpBackend_,_$q_,_$rootScope_) { 
      $httpBackend = _$httpBackend_; 
      $q = _$q_; 
      $rootScope = _$rootScope_; 

      $httpBackend.when('GET', /(.*)\/user\/api/).respond(200, mockUserData); 
     })); 

     it('should return the user object', inject(function (userService) { 
      var user; 

      var deferred = $q.defer(); 
      var promise = deferred.promise; 

      promise.then(function (response) { 
       user = response; 
      }); 

      userService.getUserInfo().then(function (response) { 
       deferred.resolve(response); 
      }); 

      $rootScope.$digest(); 

      $httpBackend.flush(); 

      expect(user).toEqual(mockUserData.d); 
     })); 
    }); 
相关问题