Я настраиваю тестовую спецификацию для моего компонента, который имеет маршруты, также я определил мою спецификацию с зависимостями следующим образом.И у ActivatedRoute есть эти свойства, но я не вижу, чтобы его объект / экземпляр создавался при отладке моей тестовой спецификации.Также я упомянул разные способы насмешки ActivatedRoute, но ничто не помогает мне.Пожалуйста, исправьте меня, если я делаю что-то не так
class UserInfotypeDetailComponent implements OnInit, OnDestroy {
constructor(
private userInfotypeDetailService: UserInfotypeDetailService,
private appLookupService: AppLookupService,
private router: Router,
private activatedRoute: ActivatedRoute
) {}
performAction(event: { action: string; objectKey: string | null }) {
let extras: any = { relativeTo: this.activatedRoute };
if (event.objectKey) {
extras.queryParams = { objectKey: event.objectKey };
}
switch (event.action) {
case "new":
case "edit":
case "copy":
case "view":
this.router.navigate([event.action], extras);
break;
case "delete":
this.deleteRecord(event.objectKey as string);
}
}
}
Вот мои маршруты:
{
path: "infotype/:id",
component: UserInfotypeDetailComponent,
outlet: "slidein",
children: [
{
path: "new",
component: UserRecordFormComponent,
data: { actionId: "A", buttonDesc: "Save" }
},
{
path: "edit",
component: UserRecordFormComponent,
data: { actionId: "E", buttonDesc: "Update" }
},
{
path: "copy",
component: UserRecordFormComponent,
data: { actionId: "C", buttonDesc: "Save" }
},
{
path: "view",
component: UserRecordFormComponent,
data: { actionId: "V", actionDesc: "View" }
}
]
}
И моя тестовая спецификация выглядит следующим образом:
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes([]),
BrowserAnimationsModule,
RouterModule
],
declarations: [
UserInfotypeDetailComponent
],
providers: [
{ provide: ActivatedRoute, useValue: {
outlet: "slidein",
params: of({
id: "0009"
})
}
},
{ provide: AppLookupService, useClass: AppLookupServiceStub },
{ provide: UserInfotypeDetailService, useClass: UserInfotypeDetailServiceStub },
{ provide: Router, useClass: AppRouterStub }
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
}));
class AppRouterStub {
navigate() {}
}
Иконтрольный пример:
it('make expect calls to router navigate', fakeAsync(() => {
let router = TestBed.get(Router);
let spy = spyOn(router, 'navigate');
component.performAction(event);
let extras: any = { relativeTo: ActivatedRoute };
if (event.objectKey) {
extras.queryParams = { objectKey: event.objectKey };
}
fixture.detectChanges();
expect(spy).toHaveBeenCalledWith([event.action], extras);
}))
Ошибка, которую он выдает:
"шпионская навигация, вызванная с [['edit'], Object ({lativeTo: Function,queryParams: Object ({objectKey: '36353539363A393C3535353E352525252525253E3E3E3E363738363735363E35363536353535'})})]], но фактическими вызовами были [['edit'], Object ({lativeTo: Object ({snapshot: Object ({ject)({_isScalar: false, наблюдатели: [], закрыто: false, isStopped: false, hasError: false, thrownError: null})}), params: Subject ({_isScalar: false, наблюдатели: [], закрыто: false, isStopped: false, hasError: false, thrownError: null}), queryParams: Subject ({_isScalar: false, наблюдатели: [], закрытый: false, isStopped: false, hasError: false, thrownError: null}), testParams: Object ({id: '0009'})}), queryParams: Object ({objectKey:'36353539363A393C3535353E352525252525253E3E3E3E363738363735363E35363536353535'})})]. "