web-dev-qa-db-ja.com

ngOnInitが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')
    }))
  );

});

これはngOnInit関数です:

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

テストを実行すると、次のようになります。

未定義で「Crazypug」と等しいことが期待されます

JasmineにngOnInit関数の終了を待機させるにはどうすればよいですか? SO=でいくつかの解決策を見つけましたが、ずっと前から(angular2の観点から)、それらは非常に複雑または時代遅れでした。

18
stijn.aerts

asyncfakeAsync関数を置き換える必要があります

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