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 ??
You need RouterTestingModule.withRoutes
like so:
beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ RouterTestingModule.withRoutes( [{path: 'yourpath', component: BlankComponent}] ) ], declarations: [ BlankComponent, YourComponentBeingTested ] }) .compileComponents() }))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With