Тестирование асинхронного (обещающего) кода в 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'
.
Где я ошибаюсь?