web-dev-qa-db-fra.com

Angular2, test et données résolues: comment tester ngOnINit?

Je travaille sur le Guide de test Angular2 et je souhaite écrire un test pour la fonction ngOnInit (). Celui de la partie Routage du guide de programmation a ce format:

let org: Org = null;

ngOnInit(): void {
  let that = this;

  this.route.data
    .subscribe((data: { org: Org }) => {
      that.org = data.org;
    });
}

Ceci est réalisé via un résolveur, comme:

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Org> {
  let id = this.authService.user.orgId;

  return this.orgService
    .getOrg(id)
    .map(
      (org: Org) : Org => {

        if(org) {
          return org;
        } else { 
          // If  the Org isn't available then the edit page isn't appropriate.
          this.router.navigate(['/provider/home']);
          return null;
        }
     })
    .first();
}

Le code fonctionne bien, mais je ne sais pas comment écrire un test pour ngOnInit. Les exemples dont je dispose supposent qu'un OrgService intégré peut être remplacé par un MockOrgService. Cependant, tout ce que j'ai est un résolveur.

Je finirai par trouver comment tester le résolveur seul. Existe-t-il des tests utiles que je peux faire avec un ngOnInit basé sur un résolveur?

Merci,

Jérôme.

14
Jerome P Mrozak

Quel est le comportement ou la méthode ngOnInit? Il ne fait qu'attribuer la valeur de org lorsque les données d'itinéraire sont résolues. C'est tout ce que vous devez vraiment tester.

let routeStub;

beforeEach(() => {
  routeStub = {
    data: null
  }

  TestBed.configureTestingModule({
    providers: [
      { provide: ActivatedRoute, useValue: routeStub }  
    ]
  })
})

it('should assign org when route is resolved', async(() => {
  let org = new Org()
  route.data = Observable.of(org)

  fixture.detectChanges();
  fixture.whenStable().then(() => {
    expect(component.org).toEqual(org)
  })
}))
29
Paul Samsotha

J'essayais de tester ngOnInit () pour un composant, et malheureusement la réponse acceptée n'a pas fonctionné pour moi. Cependant, cela a:

describe('your test', () => {
  beforeEach(async() => {
    // set up your component as necessary

    component.ngOnInit();

    await fixture.whenStable();
  });

  it('should verify your test', () => {
    // run your expectation
  });
});
14
Ian Yoder