1 | initial version |
The process for mocking ActivatedRoute involves creating a spy object for the ActivatedRoute service, setting up mock data for the route parameters or query parameters, and providing the spy object in the component's testbed configuration.
Here are the steps:
import { ActivatedRoute, Params } from '@angular/router';
import { of } from 'rxjs';
class ActivatedRouteStub {
queryParams = of({});
paramMap = of({});
}
const mockParams = { id: 1 };
const mockQueryParams = { filter: 'completed' };
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [
{ provide: ActivatedRoute, useClass: ActivatedRouteStub }
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
const activatedRoute = TestBed.get(ActivatedRoute);
activatedRoute.queryParams = of(mockQueryParams);
activatedRoute.paramMap = of(mockParams);
});
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.queryParams.subscribe(params => {
console.log(params.filter); // will output 'completed'
});
this.route.paramMap.subscribe(params => {
console.log(params.get('id')); // will output '1'
});
}