2016-07-15 8 views
12

jestem jednostka badania komponent i to, co mam:Odczekaj ngOnInit zakończyć w Jasmine Angular2

describe('Component: nav',() => { 

    beforeEach(() => addProviders([ 
    provide(UserService, {useClass: MockUserService}), 
    NavComponent 
    ])); 

    it('should have a property \'firstName\' with the value \'Crazypug\'', 
    async(inject([NavComponent], (component) => { 
     component.ngOnInit(); 
     expect(component.firstName).toEqual('Crazypug') 
    })) 
); 

}); 

Jest to funkcja ngOnInit:

ngOnInit() { 
    this.userService.getFirstNameCall().subscribe(
     data => {this.firstName = data.firstname; }); 
} 

Kiedy uruchamiam test I otrzymujemy:

Oczekiwany undefined równy 'Crazypug'

Jak mogę pozwolić Jasmine czekać na zakończenie funkcji ngOnInit? Znalazłem kilka rozwiązań na SO, ale od dawna (w angular2). Były bardzo skomplikowane lub przestarzałe.

Odpowiedz

12

Należy zastąpić async funkcję fakeAsync

import {..., tick, fakeAsync} from '@angular/core/testing'; 
... 
fakeAsync(inject([NavComponent], (component) => { 
    component.ngOnInit(); 
    tick(); 
    expect(component.firstName).toEqual('Crazypug') 
})) 
+0

mój ngOnInit wywołuje http.get (poprzez metody usługi) i po jego powrocie, zestawy danych do otrzymanej wartości. Jeśli owiję kod testowy w setTimeout, to się uda, ale metoda "tick" nie działa (nawet jeśli podana jest wartość timeout taka sama jak wartość setTimeout.). Nie wiem, dlaczego – Nitin

Powiązane problemy