Тестирование асинхронного (обещающего) кода в Angular с неработающим Jest

Я пытаюсь протестировать асинхронный код в angular с помощью jest. Он не работает должным образом при проверке выполненных и отклоненных обещаний. Вот код, который я тестирую. (Угловая таблица данных материалов)

method.ts

openAddOrEditDialog(category: AvtType, typesData?: TypeAvt): void {
    const dialogRef = this._dialog.open(AddOrEditAvtComponent, {
      disableClose: true,
      id: 'addOrEditAvt',
      width: '30%',
      height: '25%',
      data: {
        title: typesData ? 'Edit Type' : 'Add New Type',
        typesData,
        category,
      },
    });
    this.editSubscription = dialogRef
      .afterClosed()
      .subscribe((modifiedTypes: TypeAvt[]) => {
        if (modifiedTypes) {
          this._typesAvt.addOrEdit(modifiedTypes)
            .then((types: TypeAvt[]) => {
              if (!this._util.isEmpty(types)) {
                this._typesAvt.updateLocalData(types);
                this._notificationService.notifySuccess('Type was successfully updated');
                console.log('I am in then');
              }
            })
            .catch((err: HttpError) => {
              this._notificationService.notifyError('Sorry!! Failed to update the Type', err);
            });
        }
      });
  }

test.spec.ts

it(`should display 3 AVT Types in the data table when the add button is clicked and the data is entered in the popup`, fakeAsync(() => {
  const spy = jest.spyOn(notificationService, 'notifySuccess');
  jest.spyOn(typesAvtService, 'addOrEdit').mockResolvedValue([newType]);
  const addBtn: HTMLElement = fixture.debugElement.query(By.css('.btn--add'),).nativeElement;

  addBtn.click();  /* invokes openAddOrEditDialog method */
  flush();
  //tick();
  //flushMicrotasks();
  expect(spy).toBeCalled();
  console.log('I am after expect');
}));
    

Я использую console.logоператоры для отслеживания последовательности выполнения. Этот тест не проходит.'I am after expect' печатается раньше 'I am in then'.

Где я ошибаюсь?

0 ответов

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