Angular Unit testing : Error: Cannot match any routes. URL Segment: 'home/advisor'
Solution 1
You need RouterTestingModule.withRoutes
like so:
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes(
[{path: 'yourpath', component: BlankComponent}]
)
],
declarations: [
BlankComponent,
YourComponentBeingTested
]
})
.compileComponents()
}))
Solution 2
I run into same issue. The solution of accepted answer doesn't work for me, because I accidentally added the HttpClientModule instead of HttpClientTestingModule to my Spec files. To avoid the "Can not match any routes" issue be sure you add RouterTestingModule and HttpClientTestingModule everywhere it is needed.
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule,
HttpClientTestingModule,
],
declarations: [
AppComponent
],
}).compileComponents();
}));
firasKoubaa
Updated on March 12, 2020Comments
-
firasKoubaa about 4 years
Am working on unit testing under my angular 4.0.0 app , some method in my real component is calling manual routing via :
method(){ .... this.navigateTo('/home/advisor'); .... }
with navigateTo is a custom routing method calling this :
public navigateTo(url: string) { this.oldUrl = this.router.url; this.router.navigate([url], { skipLocationChange: true }); }
i have this routing file :
import ... // Components and dependencies const homeRoutes: Routes = [ { path: 'home', component: HomeComponent, children: [ { path: 'registration', component: RegistrationComponent, children: [ { path: 'synthese', component: SyntheseComponent }, { path: 'queue', component: QueueComponent, children: [ { path: 'queue-modal', component: QueueModalComponent }, { path: 'confirm', component: ConfirmComponent } ] } ] }, { path: 'toolbox', component: ToolboxComponent }, { path: 'appointment', component: AppointmentRegistrationComponent }, { path: 'appointment-validation', component: AppointmentValidationComponent }, { path: 'datepicker', component: DatePickerComponent }, { path: 'validation/:defaultNumber', component: ValidationComponent, children: [ { path: 'synthese', component: SyntheseComponent } ] }, { path: 'modalField', component: ModalFieldComponent }, { path: 'search', component: SearchComponent }, { path: 'advanced-search', component: AdvancedSearchComponent }, { path: 'tools', component: ToolsComponent }, { path: 'advisor', component: AdvisorComponent }, { path: 'pilote', component: PilotComponent }, { path: 'blank', component: BlankComponent }, { path: 'view-360/:id', component: View360Component, children: [ { path: 'client', component: ClientComponent }, { path: 'tools', component: ToolsAdvisorComponent }, { path: 'valid-close', component: ValidCloseComponent }, { path: 'application', component: ApplicationView360Component } ], canActivate: [AuthGuardAdviser] }, { path: 'view-360', component: View360Component, children: [ { path: 'client', component: ClientComponent } ], canActivate: [AuthGuardAdviser] }, { path: 'contract', component: ContractComponent }, { path: 'queue-again', component: QueueAgainComponent }, { path: 'stock', component: StockComponent, children: [ { path: 'mobile', component: MobileComponent }, { path: 'stock-level', component: StockLevelComponent } ] }, { path: 'usefull-number', component: UsefullNumberComponent }, { path: 'admin', loadChildren: 'app/home/admin/admin.module#AdminModule', // component: AdminComponent, canActivate: [AuthGuardAdmin] }, { path: 'rb', loadChildren: 'app/home/rb/rb.module#RbModule', // component: RbComponent // canActivate: [AuthGuardAdmin] }, { path: 'tools-advisor', component: ToolsAdvisorComponent }, { path: 'catalog/:haveClient', component: CatalogComponent }, { path: 'application', component: ApplicationComponent }, ] }, ]; @NgModule({ imports: [ CommonModule, RouterModule.forChild(homeRoutes) ], exports: [ RouterModule ], declarations: [] }) export class HomeRoutingModule { }
Strangely , even my application goes fonctionnally well ,but the test throws this error :
Failed: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'home/advisor' Error: Cannot match any routes. URL Segment: 'home/advisor'
it seems like i have some missing configuration .
Any ideas ??