Метод с подпиской spyon никогда не вызывался

возникла проблема с модульным тестом в Angular karma-jasmine. Я хочу протестировать метод onCreate(), который создает NgbModal, и при отправке он должен вызывать restApiService. Проблема в том, что в модульном тесте он никогда не представлен, даже если у меня есть SpyOn с Observable.

Это мой OnCreate():

public onCreate() {
this.modalRef = this.modalService.open(CreateEntityFormComponent);
// input necessary settings
this.modalRef.componentInstance.tableSettings = this.parentTableSettings;
this.modalRef.componentInstance.tableColumns = modalColumns;
// subscribe for form submission
this.modalRef.componentInstance.submit.subscribe((formValue) => {
    // fire a create method
    this.restApiHelper.create(this.parentTableSettings.entityName, formValue).subscribe(
        (resp: any) => {
            const newEntityId = resp;
            // show success notification
            this.notifications.success(this.__('Entry added successfuly.'));
                }
        (err: any) => {
            // upon failure dont close the modal, just reanable form submission and show error notification
            this.modalRef.componentInstance.savingIndicator = false;
            this.errorHandler.error(err);
                }); 
    });
}

Это мой модульный тест:

describe(`SignallingLinkSet Component`, () => {
  let injector: TestBed;
  let comp: SignallingLinkSetComponent;
  let fixture: ComponentFixture<SignallingLinkSetComponent>;      
  let restApiHelperService: RestApiHelper;

  beforeEach(() => {
    TestBed.configureTestingModule({
        imports: [
            CommonModule,
            ReactiveFormsModule,
            NgbModule.forRoot(),
            HttpClientModule,
          ],
          declarations: [
            SignallingLinkSetComponent
          ],
          providers: [
            RestApiHelper,
            HttpTestingController,
            NgbModal,
          ]

    });
    injector = getTestBed();
    fixture = TestBed.createComponent(SignallingLinkSetComponent);
    comp = fixture.componentInstance;
    restApiHelperService = fixture.debugElement.injector.get(RestApiHelper);
    spyOn(comp.modalService, 'open').and.callThrough();
    fixture.detectChanges();
  });

  it('onCreate()', () => {
    // mock data
    const formData = {
      linksNumber: '1',
      name: 'test'
    };    
    const response = {SignallingLinkSet: 10846692};

    const submitSpy = spyOn(comp.modalRef.componentInstance, 'submit').and.returnValue(Observable.of(formData));
    spyOn(comp.restApiHelper, 'create').and.returnValue(Observable.of(response));

    comp.onCreate();

    // assert
    expect(comp.modalRef.componentInstance).not.toBeUndefined();
    expect(submitSpy).toHaveBeenCalled();
    expect(restApiHelperService.create).toHaveBeenCalledTimes(2);
  });

});

Я всегда получаю Expected spy submit to have been called., поэтому отправка макета никогда не вызывается. Спасибо за помощь

Обновлять: Я изменил comp.modalRef = modalService.open(CreateEntityFormComponent); на spyOn(comp.modalService, 'open').and.callThrough();, но теперь получаю comp.modalRef.componentInstance undefined

Первое, что делает onCreate - заменяет modalRef на ту, которую вы не заметили.

jonrsharpe 10.08.2018 14:33

@jonrsharpe обновлен, когда я удаляю submitSpy, а также последние 2 оператора ожидания, тест проходит

misanek 10.08.2018 15:18
0
2
490
0

Другие вопросы по теме