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

31,281

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();
}));
Share:
31,281
firasKoubaa
Author by

firasKoubaa

Updated on March 12, 2020

Comments

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