2016-03-19 26 views
0

$ httpBackend backend mock ile bir yasemin birim testi çalıştırdığımda bir sorun yaşıyorum. Servis çağrısından dönen değeri test etmek istiyorum. Servisi çağırıyor ve bitiş noktasına vuruyor ama yöntemin kendisinden bir hata almaya devam ediyorum. Bunun işe yaraması için ne kaçırdığımı bilmiyorum. Herhangi bir yardım gerçekten takdir edilmektedir.

// hata

TypeError: 'undefined' is not an object (evaluating 'data[0].data') 

/// birim test

describe("DataService", function() { 

     describe('testing service', function() { 
      var TheService, scope; 

      beforeEach(function() { 
       module(moduleName); 
       module('services'); 
      }); 

      beforeEach(inject(function($injector,$rootScope) { 
       TheService = $injector.get('TheService'); 
       scope=$rootScope.$new(); 
      })); 

      it('should have a method defined', function() { 
       expect(TheService.getStuff).toBeDefined(); 
      }); 

      it('should have a method defined', inject(function($httpBackend) { 

      var mock = { data: 'World' }; 


       $httpBackend.whenGET("/theurl/getStuff").respond({ data: 'World' }); 


       $httpBackend.expectGET("/theurl/getStuff"); 

       TheService.getStuff(); 

       scope.$digest(); 

       expect(TheService.getStuff).toEqual(mock); 

       $httpBackend.flush(); 
      })); 

     }); 

}); 

// hizmet yöntemi

function TheService($http, $q) { 
     var vm = this; 


     vm.getStuffs = null; 
     vm.getStuff = getStuff; 
     vm.theresponse = {}; 

     function getStuff() { 

      var deferred = $q.defer(); 

      $http({ 
       method: 'GET', 
       url: "/theurl/getStuff" 

      }).success(function(data){ 

       vm.theresponse = data[0].data 
       deferred.resolve(vm.theresponse); 

      }).error(function(){ 

       deferred.reject('An error occurred'); 

      }); 

      return deferred.promise; 
     } 
    } 

cevap

2

Eh, sahte son nokta döndürür

{ data: 'World' } 

Ama hizmet

data[0].data 

veri bir nesnedir ulaşmaya çalışır. Bu bir dizi değil. Yani data[0] tanımsızdır. Servis kod iyi çalışması için

, sen

[{ data: 'World' }] 

Ayrıca, kod bir söz antipattern kullanır gibi bir şey dönün ve başarı ve hata geri aramalar kaldırılmış olmalıdır. Daha iyi bir alternatif için http://blog.ninja-squad.com/2015/05/28/angularjs-promises/'u okuyun:

+0

thanks @JB. Bunu özlediğime inanamıyorum. – Jimi

İlgili konular