typescript - Jasmine testar prenumeration på service level Observable från OnInit Angular


Jag arbetar med att testa en komponent som har en prenumeration inom ngOnInit-metoden. Fungerar bra när den körs "i det vilda" men testning misslyckas eftersom det inte finns något prenumerationsobjekt tillgängligt. Jag har försökt skapa en stubbtjänst för att bygga observabelobjektet inom mitt enhetstest, men kan inte få det att fungera.

Här är min Service- och Komponentkod (förkortat):

Komponent

  ngOnInit() {
   this.userSvc.user.subscribe(user => {
    this.currentUser = user; //-- this.userSvc.user (which is an observable on that class) is available in the wild, but not when testing
   })
  }

UserService

  //-- User Subscribe items
  userSubject: BehaviorSubject<any> = new BehaviorSubject(null);
  user = this.userSubject.asObservable(); // this is the property I'm subscribing to which gets set after login.

Här är min testuppställning

//SvcStub
const usrSvcStub = {
 user : {
  FirstName: "Test",
  LastName: "User",
  Username: "testuser"
 }
}

//Providers Config
 providers: [
    {provide: UserService, useValue: {usrSvcStub}}
   ]

När testet körs kan jag se via debug att det laddar min "StubSvc" men användaren är odefinierad och jag kan inte prenumerera på den. Kan någon peka mig i rätt riktning? Skärmbilden nedan visar när komponentens ngOnInit-funktion laddas och prenumererar på service-observable.

Svar #1

Kan du försöka

const usrSvcStub = {
 user : new BehaviorSubject<any>({
  FirstName: "Test",
  LastName: "User",
  Username: "testuser"
 })
}