2017-09-04 24 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); 
     })); 
    }); 
相關問題