Winkel-2 unit-test-Funktion aufgerufen ngOnInit
Ich versuche ein unit test eine Funktion in einer Komponente, wird diese Funktion aufgerufen, aus ngOnInit basiert auf einem inital-Zustand:
ngOnInit() {
if (this.list.length === 0) {
return this.loadData();
}
return this.isLoading = false;
}
//I'm calling here because it could also be called from button on the UI
loadData() {
this.apiService.apiGet().subscribe((response) => {
//handle data
return this.isLoading = false;
}, (error) => {
//handle error
return this.isLoading = false;
})
}
Aber ich bin nicht in der Lage es zu testen, es sei denn, ich rufe die Funktion manuell auf die tests. Das ist mein test-code:
//THIS CODE WORKS
it('should be false after calling loadData()', async(() => {
component.loadData();
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.isLoading).toBeFalsy();
});
}));
//THIS CODE DOESN'T work
it('should be false after calling loadData()', async(() => {
spyOn(component,'loadData').and.returnValue({code:'success'});
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.isLoading).toBeFalsy();
});
}));
Auch dies ist ein Stück code, den ich verwende, um zu verspotten die apiGet Funktion:
apiGet() {
return Observable.of({ data: 'success' });
}
Aber ich weiß, das ngOnInit ausgeführt wird, und die Funktion aufgerufen wird, da dieser test pass:
it('should be called if list array is empty', () => {
spyOn(component,'loadData').and.returnValue({code:'success'});
fixture.detectChanges();
expect(component.loadData).toHaveBeenCalled();
});
Was mache ich falsch? Warum der test failling nicht erhalten, um das Ende Versprechen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese verspottet Methode nicht
isLoading
, während gibt es einen Wert, das ist hier irrelevant:So, Ihr Verhalten unterscheidet sich klar von der realen Methode. Wenn dies bedeutet, dass diese Erwartung falsch ist, dann ist es:
Den richtigen Weg, dies zu testen ist, zu testen, diese in mehrere isolierte specs, Zeile für Zeile: