2017-09-04 4 views
0

Je suis en train de tester une fonction de service qui effectue de nombreux appels $http.get(). La fonction réelle sous test renvoie une promesse. Actuellement, le test échoue avec response is undefined.Impossible de lire la propriété de non défini dans le test de karma angulaire

Voici le test:

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 
})); 

Qu'est-ce que je fais mal?

+0

Avez-vous vérifié que l'objet de réponse contient une propriété de succès? –

+0

le paramètre de réponse dans les deux fonctions est null. –

Répondre

0

Basé sur this après j'ai résolu mon problème avec le code suivant (s'il vous plaît pardonnez le changement dans le contexte du livre à l'utilisateur):

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); 
     })); 
    });