I'm working through the Angular2 testing guide and wish to write a test for the ngOnInit()
function. The one from the Routing section of the programming guide has this format:
let org: Org = null;
ngOnInit(): void {
let that = this;
this.route.data
.subscribe((data: { org: Org }) => {
that.org = data.org;
});
}
This is fulfilled through a resolver, like:
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();
}
The code works OK, but I'm not sure how to write a test for ngOnInit
. The examples available to me assume that an embedded OrgService
can be replaced by a MockOrgService
. However, all I have is a resolver.
I'll eventually figure out how to test the resolver on its own. Are there any useful tests I can do with a resolver-based ngOnInit
?
What is the behavior or the ngOnInit
method? All it does is assign the value of the org
when the route data is resolved. So that's all you really need to test.
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)
})
}))