Подождите, пока ngOnInit закончится в Жасмине Angular2 - программирование

Подождите, пока ngOnInit закончится в Жасмине 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; });
}

Когда я запускаю тест, я получаю:

Ожидаемый undefined равный 'Crazypug'

Как я могу позволить Жасмину ждать завершения функции ngOnInit? Я нашел некоторые решения на SO, но с давних времен (в angular2 сроки). Они были очень сложными или устаревшими.

4b9b3361

Ответ 1

Вы должны заменить async на fakeAsync

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