Угловой юнит-тест ngOninit - PullRequest
0 голосов
/ 22 октября 2018

Конфигурация тестового стенда

  TestBed.configureTestingModule({
            declarations: [ EditPersorgaComponent, ArrayFromIntPipe, TeamFilterPipe ],
            schemas: [ NO_ERRORS_SCHEMA ],
            imports: [  HttpClientModule, NgbModule.forRoot(), TranslateModule.forRoot({
                loader: {
                  provide: TranslateLoader,
                  useFactory: HttpLoaderFactory,
                  deps: [HttpClient]
                }
              })],
            providers: [
                { provide: Renderer2, useValue: renderer2Stub },
                { provide: NavigationService, useValue: navigationServiceStub },
                { provide: DatepickerFormater, useValue: datepickerFormaterStub },
                { provide: NgbModal, useValue: ngbModalStub },
                { provide: PersorgaService, useValue: persorgaServiceStub },
                { provide: ActivatedRoute, useValue: activatedRouteStub },
                { provide: ActionsSubject, useValue: actionsSubjectStub },
                { provide: ToasterService, useValue: toasterServiceStub },
                { provide: TranslateService, useValue: translateServiceStub },
                { provide: AppConfirmService, useValue: appConfirmServiceStub }
            ]
        });
        fixture = TestBed.createComponent(EditPersorgaComponent);
        comp = fixture.componentInstance;
    });

Я хочу проверить ngOninit в Angular 2 +

  ngOnInit() {
    this.navigationService.menuStore$.dispatch(new SetFromArray({
      widgetName: 'elementPersonalOrg', data: NavigationService.getMenuElement('elementPersonalOrg').sub
    }));

    this.selectedDate = this.dpFormatter.convertToNgbDateStruct(new Date());
  }

Я попробовал юнит-тест

describe('ngOnInit', () => {
    it('makes expected calls', async( () => {
        const navigationServiceStub: NavigationService = fixture.debugElement.injector.get(NavigationService);
        spyOn(navigationServiceStub, 'menuStore$');
        comp.ngOnInit();
        expect(navigationServiceStub.menuStore$).toHaveBeenCalled();
    }));
});

Я получаюошибки типа

TypeError: Невозможно прочитать свойство 'id' из undefined Failed: Невозможно прочитать свойство 'debugElement' из undefined

Может кто-нибудь, пожалуйста, помогите мне с этим.Спасибо

1 Ответ

0 голосов
/ 11 мая 2019

После экземпляра вашего компонента вам нужно установить идентификатор для чего-то, что ваш компонент требует при загрузке.Это часто делается в beforeEach вне предконфигурируемой конфигурации тестового стенда.

Если у вас есть маршрут для этой страницы, для которого требуется какой-либо идентификатор, это может быть так, и его нужно будет обработать перед настройкой тестового стенда.Не видя вашего компонента, это трудно ответить.

Посмотрите на свой компонент и посмотрите, какие элементы загружаются в него.Также я предлагаю удалить NO_ERRORS_SCHEMA.Это скроет реальные ошибки, которые вы, вероятно, не хотите скрывать.

Другая возможность - это время при компиляции компонента.Попробуйте добавить fakeAsync к тому, что ваша конфигурация TestBed будет первой.

beforeEach(async(() => { // testbed configure here   }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...