web-dev-qa-db-fra.com

Attendez que ngOnInit se termine dans Jasmine Angular2

Je teste un composant unitaire et voici ce que j'ai:

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

});

Voici la fonction ngOnInit:

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

Lorsque je lance le test, j'obtiens:

Attendu non défini comme égal à "Crazypug"

Comment laisser Jasmine attendre la fin de la fonction ngOnInit? J'ai trouvé des solutions sur SO mais depuis longtemps (en termes de temps angulaire2). Elles étaient très compliquées ou dépassées.

18
stijn.aerts

Vous devez remplacer la fonction async pour fakeAsync

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