Estoy trabajando con la guía de prueba de Angular2 y deseo escribir una prueba para la función ngOnInit() . El de la sección Enrutamiento de la guía de programación tiene este formato:
let org: Org = null; ngOnInit(): void { let that = this; this.route.data .subscribe((data: { org: Org }) => { that.org = data.org; }); }Esto se cumple a través de un resolver, como:
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(); } El código funciona bien, pero no estoy seguro de cómo escribir una prueba para ngOnInit . Los ejemplos disponibles para mí asumen que un OrgService incrustado puede ser reemplazado por un MockOrgService . Sin embargo, todo lo que tengo es un resolver.
Eventualmente descubriré cómo probar el resolutor por sí solo. ¿Hay alguna prueba útil que pueda hacer con un ngOnInit basado en resolución?
¿Cuál es el comportamiento o el método ngOnInit ? Todo lo que hace es asignar el valor de la org cuando se resuelven los datos de la ruta. Así que eso es todo lo que realmente necesitas probar.
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() routeStub.data = Observable.of(org) fixture.detectChanges(); fixture.whenStable().then(() => { expect(component.org).toEqual(org) }) }))Estaba tratando de probar ngOnInit() para un componente y, lamentablemente, la respuesta aceptada no funcionó para mí. Sin embargo, esto hizo:
describe('your test', () => { beforeEach(async() => { // set up your component as necessary component.ngOnInit(); await fixture.whenStable(); }); it('should verify your test', () => { // run your expectation }); });