Я пишу тесты для моего углового компонента. У меня есть один родительский компонент и дочерний компонент. В ngOnInit родительского компонента я вызываю внутреннюю функцию, которая требует аутентификации Во время тестирования дочернего компонента я не хочу загружать или я хочу предотвратить ngOnInit родительского компонента.
Часть моих маршрутов выглядит так:
{
path: 'core',
component: CoreComponent,
children: [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{
path: 'endpoint',
component: EndpointComponent,
children: [
{ path: '', redirectTo: 'machine', pathMatch: 'full' },
{ path: 'machine', component: MachineComponent }
]
}
]
}
Здесь я тестирую MachineComponent. А в Coregomponent ngOnInit я вызываю внутреннюю функцию. И я хочу предотвратить это во время тестирования MachineComponent.
ngOnInit() {
this.getMyDetails();
}
Мой тестовый класс выглядит так:
describe('MachineComponent', () => {
let component: MachineComponent;
let endpointService: EndpointService;
let fixture: ComponentFixture<MachineComponent>;
let ep_data: any = {"name":"machine_ep"};
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
BrowserAnimationsModule,
BrowserModule,
FormsModule,
HttpClientModule,
CommonModule,
RouterTestingModule.withRoutes([{ path: 'machine', component: MachineComponent }])
],
declarations: [ MachineComponent ],
providers: [
EndpointService
],
schemas: [ NO_ERRORS_SCHEMA ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MachineComponent);
component = fixture.componentInstance;
fixture.detectChanges();
endpointService = TestBed.get(EndpointService);
spyOn(endpointService, 'getEndpoints').and.returnValue(of([ep_data]));
});
it('should get endpoints', () => {
component.getEndpoints();
expect(component.endpoints[0].name).toBe("machine_ep");
expect(endpointService.getEndpoints).toHaveBeenCalled();
});
});
В моем перехватчике я перенаправляю на маршрут входа в систему, если какой-либо сервисный вызов не выполняется с кодом 401.
Мой тест не пройден с ошибкой:
HeadlessChrome 70.0.3538 (Linux 0.0.0) ERROR: 'Unhandled Promise rejection:', 'Cannot match any routes. URL Segment: 'login'', '; Zone:', 'ProxyZone', '; Task:', 'Promise.then', '; Value:', Error: Cannot match any routes. URL Segment: 'login'
Error: Cannot match any routes. URL Segment: 'login'
Как мне избежать этой ошибки?