Запретить вызов метода родительского маршрута ngOnInit для любого теста дочернего компонента - PullRequest
0 голосов
/ 23 января 2019

Я пишу тесты для моего углового компонента. У меня есть один родительский компонент и дочерний компонент. В 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'

Как мне избежать этой ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...