Testen Sie eine Methode, die abonniert ist, um eine beobachtbare - Winkel-2

Ich möchte zum testen eine Methode innerhalb einer Eckigen 2-Komponente abonniert ist, um eine beobachtbare, der zurückgegeben wird, von einer Methode in einem Dienst. Hier ist der code für die service-Methode in der Zusammenfassung:

public create(user: User): Observable<any> {
  return this.http.post(this._api.create,
    JSON.stringify(user), {
      headers: this.apiConfig.getApiHeaders()
    }).map((res: Response) => res.json());
  }

Es ist einfach zu unit-testen Sie diese Methode, denn es gibt eine observable, so kann ich nur abonnieren. Aber ich möchte testen Sie die Methode in der Komponente, die bereits abonniert haben zu diesem:

public onSubmit(user: User): void {
  this._authentication.create(user).subscribe((token) => {
    localStorage.setItem('token', token);
    this.router.navigate(['/Home']);
  });
}

Heres meine Skillung so weit, aber wenn ich versuche, spyOn "localStorage".setItem es kommt wieder als nicht genannt zu werden. Mein Verständnis ist, es ist wahrscheinlich überprüfen, um zu sehen, ob es genannt worden, bevor es tatsächlich genannt worden.

it('Should login a user and on success store a token in localStorage',
  injectAsync([TestComponentBuilder], (tcb) => {
    return tcb.createAsync(Login).then((fixture) => {
      let instance = fixture.debugElement.componentInstance;
      localStorage.clear();
      spyOn(localStorage, 'setItem');
      instance.onSubmit({userId: '[email protected]', password: 'password', siteName: 'sample'});
      expect(localStorage.setItem).toHaveBeenCalled();
    });
  })
);

Frage ich mich, ob ich müssen zu verspotten, aus der diese._authentication.create-Methode, um wieder eine neue observable, die mit einem mock-Antwort in es?

Nach mehr Forschung ein paar Artikel angezeigt, die ich tun müssen, um mock-out-service und eine Rückkehr zu Beobachten.der (), der synchron ausgeführt, das problem zu lösen, krank, kopieren Sie den code unten. Dies ist jedoch immer noch nicht funktioniert, habe ich schon fast den ganzen Tag, ich nicht das Gefühl, diese sollten so schwer sein, jede Hilfe zu schätzen.

class MockAuthentication extends Authentication {
  public create(user: Object): Observable<any> {
    return Observable.of({'test': 'test'});
  }
}
InformationsquelleAutor HomeBrew | 2016-02-26
Schreibe einen Kommentar