Как написать модульные тесты на событии модального закрытия ngBootstrap? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть код, который открывает модальное окно для подтверждения удаления элемента:

  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);
...