У меня есть код, который открывает модальное окно для подтверждения удаления элемента:
handleDeleteMarkingPeriod(deleteModel: DeleteModel) {
this.openModalToAcceptDelete('Are you sure you want to delete this item?', deleteModel);
}
openModalToAcceptDelete(message = '', deleteModel: DeleteModel) {
this.deleteModalReference = this.modalService.open(DeleteApprovalModalComponent, {backdrop: 'static'});
this.deleteModalReference.componentInstance.message = message;
this.deleteModalReference.result.then((result) => {
if (result.approve) {
this.deleteMarkingPeriod(deleteModel);
}
}, (reason) => {
console.log(reason);
});
}
Когда срабатывает this.deleteModalReference.result.then
, я проверяю ответ, если result.approve
равно true
, я выполняю действие.
Вопрос в том, как мне выполнить запуск из файла .spec this.deleteModalReference.result.then
обещание со значением {approve: true}
, Мой тестовый пример выглядит так:
it('it should open modal and accept delete', () => {
component.schoolCalendars = schoolCalendars;
spyOn(component, 'deleteMarkingPeriod');
component.handleDeleteMarkingPeriod({
calendarId: '7',
markingPeriodId: '18'
});
expect(modalService.open).toHaveBeenCalled();
expect(component.deleteMarkingPeriod).toHaveBeenCalled();
});
Ответ теста:
FAILED TESTS:
ManageCalendarTableComponent
markingPeriodForm
delete
✖ it should open modal and accept delete
Chrome 77.0.3865 (Mac OS X 10.14.5)
Expected spy deleteMarkingPeriod to have been called.
Все работает как положено, я просто не могу понять, как запустить кусок кода внутри .then (), это насмешка над самой службой:
modalService = TestBed.get(NgbModal);
modalRef = modalService.open(DeleteApprovalModalComponent);
spyOn(modalService, 'open').and.returnValue(modalRef);