问题描述
在我的angular 4.0.0应用程序下进行单元测试时,实际组件中的某些方法是通过:调用手动路由
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');
....
}
带有 navigateTo 的自定义路由方法称为:
with navigateTo is a custom routing method calling this :
public navigateTo(url: string) {
this.oldUrl = this.router.url;
this.router.navigate([url], { skipLocationChange: true });
}
我有此路由文件:
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 :
似乎我缺少一些配置.
任何想法
推荐答案
我的评论如下:
要对路由器进行单元测试时,必须使用测试模块,而不是实际的模块.
When you want to unit test your router, you have to use the testing module, not the actual one.
以
import { RouterTestingModule } from '@angular/router/testing';
然后,在您的测试平台上
Then, in your Testbed
imports: [RouterTestingModule]
现在您应该可以对组件进行单元测试了
Now you should be able to unit test your component
编辑
要监视您的路由,您要做的就是
To make a spy on your routing, what you have to do is
spyOn(component.router, 'navigate').and.returnValue(true);
您希望它看起来像
expect(component.router.navigate).toHaveBeenCalledWith('/home/advisor');
这篇关于角单元测试:错误:无法匹配任何路线.网址段:“家庭/顾问"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!