Testen Fehler-Fall mit observablen in Dienstleistungen

Sagen wir, ich habe eine Komponente, die abonniert, um eine service-Funktion:

export class Component {

   ...

    ngOnInit() {
        this.service.doStuff().subscribe(
            (data: IData) => {
              doThings(data);
            },
            (error: Error) => console.error(error)
        );
    };
};

Abonnieren Aufruf nimmt zwei anonyme Funktionen, die als Parameter, ich habe es geschafft, bis eine funktionierende unit-test für die Daten-Funktion, aber das Karma wird nicht akzeptieren, Abdeckung für die Fehler ein.

Testen Fehler-Fall mit observablen in Dienstleistungen

Habe ich versucht, die Bespitzelung der Konsole.error-Funktion, Ausgabe einer Fehlermeldung und dann zu erwarten, dass der Spion gerufen worden zu sein, aber das bedeutet nicht ganz tun es.

Mein unit-test:

spyOn(console,'error').and.callThrough();

serviceStub = {
        doStuff: jasmine.createSpy('doStuff').and.returnValue(Observable.of(data)),
    };

    serviceStub.doStuff.and.returnValue(Observable.throw(

        'error!'
    ));

serviceStub.doStuff().subscribe(

    (res) => {

        *working test, can access res*
    },
    (error) => {

      console.error(error);
      console.log(error);  //Prints 'error!' so throw works.
      expect(console.error).toHaveBeenCalledWith('error!'); //Is true but won't be accepted for coverage.
    }
);

Was ist die best practice für die Prüfung anonyme Funktionen wie diese? Was ist das absolute minimum zur Sicherung der Testabdeckung?

Dein test keinen Sinn macht; Sie ersetzen die callback-Sie sagen, Sie wollen zu testen. Nur Tests, die subscribe ruft seine zweite argument, wenn ein Fehler Auftritt ist nicht testen Sie Ihren code, es ist die Prüfung der Rahmenbedingungen, die ein anti-pattern. Auch Sie stellen zwei unterschiedliche Ergebnisse für Ihre mock-Aufruf in aufeinander folgenden Zeilen.
Okay, so was wäre eine gute Möglichkeit es zu testen? Auslösen eines Fehlers in einem separaten it-block?
Sie müssen aufrufen, um die tatsächliche Umsetzung, aber Sie haben nicht gezeigt, reicht ein Minimale, Vollständige und Überprüfbare Beispiel, zu erraten, wie das erreicht werden könnte.
ein update für diese Frage?

InformationsquelleAutor user3656550 | 2016-10-10

Schreibe einen Kommentar