2016-04-01 11 views
1

ich eine AuthService haben, die eine Abhängigkeit von userService hat, die von einem anderen ModulJasmin und AngularJS - Unit-Tests eine verspottete Abhängigkeit

Ich versuche, ein Gerät zu testen, die eine Eigenschaft des userService prüft zu schreiben kommt die I habe mich verspottet und den $ service in meiner Testspezifikation verwendet.

Meine Erwartung auf meinem userService schlägt fehl, da es als undefined zurückkommt. Was muss ich tun, um meine gespotteten zu testen?

Dank

UPDATE

Ok auf die Kommentare so basiert, kann ich es durch die Organisation meiner Tests zu bestehen bekommen wie so

describe('hasAccessToken', function() { 
    beforeEach(function(){ 
     authService.hasAccessToken(); 
    }); 
    it('should make a get request to catalogues', function() { 
     $httpBackend.expectGET('/auth/checktoken').respond({}); 
     $httpBackend.flush(); 
    }); 
    it('should set userService.userLoggedIn to be true', function() { 
     $httpBackend.expectGET('/auth/checktoken').respond({}); 
     $httpBackend.flush(); 
     expect(userService.userLoggedIn).toBeTruthy(); 
    }); 
    }); 

Wie Sie ich versuche sehen um einen Test für den expectGET und den userService separat zu schreiben, ist das korrekt? Scheint einfach ziemlich ausschweifend ??

+0

Ist Der Vorgang, den authService zu injizieren, um userLoggedIn auf "True" zu setzen, oder fehlt ein Anruf? Etwas wie authService.login (Benutzer); –

+0

Ja Entschuldigung, ich habe mein Code-Snippet aktualisiert, also gibt es einen früheren Test, der 'authService.hasAccessToken() 'aufruft, der' userService.userLoggedIn' auf true setzt – mindparse

+0

Die beforeEach-Methode wird vor jedem Test ausgeführt, und Sie wissen es setzt den Status von userService zurück. Sie könnten den Aufruf von hasAccessToken in Ihre beforeEach-Methode einfügen oder sie bei Bedarf in jedem Test aufrufen. –

Antwort

0

Sie verwenden die Winkels value synthetischen Zucker für Anbieter, aber Sie liefern einen Konstruktor, der mit der service Syntax verwendet werden sollte.

versuchen, den Dienst Konstruktor mit der service Syntax instaed zu verwenden:

beforeEach(module(function ($provide) { 
    $provide.service('userService', function(){ 
     return { 
      userLoggedIn: false 
     } 
    }); 
}); 

oder nur der Instanz-Dienst mit der value Syntax:

beforeEach(module(function ($provide) { 
    $provide.value('userService', { 
      userLoggedIn: false 
     } 
    }); 
}); 

siehe Winkel docs: $provide

Verwandte Themen