5

$ http kullanan bir hizmet için birim sınaması yapmaya çalışıyorum. Jasmine'i kullanıyorum ve bu hatayı almaya devam ediyorum:TypeError: ayrıştırılmış, angularjs hizmet birimi sınaması üzerinde tanımlı değil

describe ('Invite Service', function() { 
    var $httpBackend, inviteService, authRequestHandler; 

    var token = '1123581321'; 

    beforeEach(module('myapp.services')); 

    beforeEach(inject(function ($injector) { 
    $httpBackend = $injector.get('$httpBackend'); 
    authRequestHandler = $httpBackend.when('/invites/' + token + '/get-invite').respond({userId: 'userX'}, {'A-Token': 'xxx'}); 
    inviteService = $injector.get('inviteService'); 
    })); 

    afterEach (function() { 
    $httpBackend.verifyNoOutstandingExpectation(); 
    $httpBackend.verifyNoOutstandingRequest(); 
    }); 

    describe ('getInvite', function() { 
    beforeEach(function() { 
     inviteService.token = token; 
    }); 

    it ('should return the invite', function() { 
     $httpBackend.expectGET('/invites/' + token + '/get-invite'); 
     inviteService.getInvite(); 
     $httpBackend.flush(); 
    }); 
    }); 
}); 

I:

angular.module('myapp.services', []) 
.factory('inviteService', ['$rootScope', '$http', function($rootScope, $http) { 
    var inviteService = { 
     token: '', 

     getInvite: function(callback, errorCallback) { 
      $http.get('/invites/' + this.token + '/get-invite') 

      .success(function(data) { 
       callback(data); 
      }) 

      .error(function(data, status, headers, config) { 
       errorCallback(status); 
      }); 
     } 
    }; 

    return inviteService; 
}]); 

Bu benim test neye benzediği:

TypeError: parsed is undefined in angular.js (line 13737)

Bu benim hizmet neye benzediği angularjs tabanlı uygulamaları test etmek için oldukça yeni ve angularjs belgelerinde yer alan örneği kullandım:

https://docs.angularjs.org/api/ngMock/service/ $ httpBackend

Ne eksik olduğumdan emin değilim, ve zaten farklı şeyler denedim ve her zaman aynı hatayı alıyorum, herhangi bir yardım takdir edilecektir.

+0

Bir keman http://jsfiddle.net/themyth92/58aLjyp9/1/ oluşturduk ve mükemmel çalışıyor. Belki sorun testin kendisinde değil. Açısal versiyonun ne olduğunu sorabilir miyim? – themyth92

+0

Hey gecikme için özür dilerim, hala sorun yaşıyorum ama keman üzerinde çalıştığını görebiliyorum, açısal v1.2.11 kullanıyorum. Teşekkürler! –

+0

Hmm, kemanı angulr sürümüyle güncelledim ama yine de iyi. Bağlantı: http://jsfiddle.net/58aLjyp9/2/. Bu satırda dikkat edilmesi gereken bir şey "$ httpBackend.expectGET ('/ invites /' + token + '/ get-invite');" Kemanda yaptığım gibi cevap vermeyi unuttun. Her şeyin yolunda gitmediği dışında, kodlanmış değişkenleri çağırdığınız yerde kodunuza bir göz atabilir ya da belki Angularjs'teki $ parse hizmetiyle ilgili olabilir. – themyth92

cevap

6

parsed değişkeni, söz konusu hizmetin URL'sidir. Aşağıdaki nedenlerden biriyle undefined geçerli:

  • URL bozuk
  • $ http.get
  • token
  • sucess ve error geri aramaları hiçbir data
  • .respond sahip
  • tanımlanmamıştır çağrılmaz
  • .respond olarak adlandırılan bir yanıt nesnesini bir argüman olarak içermez Örneğin

:

describe('simple test', test); 

function test() 
    { 
    it('should call inviteService and pass mock data', foo); 

    function foo() 
    { 
    module('myapp.services'); 
    inject(myServiceTest); 

    function myServiceTest(inviteService, $httpBackend) 
     { 
     $httpBackend.expect('GET', /.*/).respond(200, 'bar'); 

     function callback(){}; 

     inviteService.getInvite.token = '1123581321'; 
     inviteService.getInvite(callback, callback); 

     $httpBackend.flush(); 

     expect(callback).toHaveBeenCalledOnce(); 
     } 
    } 
    } 

Kaynaklar