Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular Unit testing : Error: Cannot match any routes. URL Segment: 'home/advisor'

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 ??

like image 428
firasKoubaa Avatar asked Nov 09 '17 11:11

firasKoubaa


Video Answer


1 Answers

You need RouterTestingModule.withRoutes like so:

beforeEach(async(() => {   TestBed.configureTestingModule({     imports: [       RouterTestingModule.withRoutes(         [{path: 'yourpath', component: BlankComponent}]       )     ],     declarations: [       BlankComponent,       YourComponentBeingTested     ]   })   .compileComponents() })) 
like image 183
danday74 Avatar answered Sep 25 '22 19:09

danday74