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?

Schreibe einen Kommentar