私はコンポーネントを単体テストしていますが、これは私が持っているものです:
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')
}))
);
});
これはngOnInit関数です:
ngOnInit() {
this.userService.getFirstNameCall().subscribe(
data => {this.firstName = data.firstname; });
}
テストを実行すると、次のようになります。
未定義で「Crazypug」と等しいことが期待されます
JasmineにngOnInit関数の終了を待機させるにはどうすればよいですか? SO=でいくつかの解決策を見つけましたが、ずっと前から(angular2の観点から)、それらは非常に複雑または時代遅れでした。
async
のfakeAsync
関数を置き換える必要があります
import {..., tick, fakeAsync} from '@angular/core/testing';
...
fakeAsync(inject([NavComponent], (component) => {
component.ngOnInit();
tick();
expect(component.firstName).toEqual('Crazypug')
}))