Ich versuche derzeit, eine Funktion zu testen, die einen http-Anfragedienst aufruft und dann etwas im Abonnement-Teil (ruft eine Funktion und setzt eine Variable). Mein Ansatz war bisher, nur die Funktion aufzurufen und ich dachte, der Request-Service wird automatisch aufgerufen und der Subscribe-Part wird ausgeführt. Ich habe jedoch das Gefühl, dass dies nicht der richtige Weg ist, da es nicht funktioniert.Angular2 - Testen Sie eine Funktion, die einen HTTP-Dienst innerhalb
Die Funktion, die ich testen wollen:
public trainBot() {
this.isTraining = true;
this.requestsService.trainModel(this.botId, false)
.subscribe(response => {
this.trainingStatus = this.trainingStatusMapping[response['status']];
this.pollTrainingStatus();
});
}
Mein Test bisher (was nicht funktioniert).
it('should poll the training status',() => {
spyOn(component, 'pollTrainingStatus').and.callThrough();
component.trainBot();
fixture.detectChanges();
expect(component.pollTrainingStatus).toHaveBeenCalled();
});
Also, kann mir jemand sagen, wie innerhalb der .subscribe diesen Teil zu testen (... Teil
Update:?
als jemand vorgeschlagen, dass ich hinzugefügt und return async meinen . Test Sie arbeiten immer noch nicht, aber wie das nun auf der Suche:
it('should poll the training status', fakeAsync(() => {
component.trainBot();
spyOn(service, 'trainModel').and.returnValue(Observable.of({'status': 'training'}));
spyOn(component, 'pollTrainingStatus').and.callThrough();
fixture.detectChanges();
tick(1);
expect(service.trainModel).toHaveBeenCalled();
expect(component.pollTrainingStatus).toHaveBeenCalled();
}));
der Fehler ist die gleiche
Können Sie den Fehler, den Sie erhalten, oder die Ausgabe für den fehlgeschlagenen Test teilen? – Kevin
@Kevin "Erwarteter Spy PollTrainingStatus wurde aufgerufen." Was bedeutet, dass pollTrainingStatus() nicht aufgerufen wurde – threxx
Überprüfen Sie diese Frage: [angular2 testing mit Jasmine für Abonnement-Methode] (https://stackoverflow.com/questions/40080912/angular2-testing-using-jasmine-for-subscribe-method) .Lass mich wissen, ob die Antwort dort für dich funktioniert. – Kevin