Неудачный тест "Ожидается, что шпион doDeleteRule вызван.", Жасмин, Карма - PullRequest
1 голос
/ 25 января 2020

Прямой тест не пройден с использованием жасмина. «Ожидается, что шпион doDeleteRule будет вызван». Я заметил, что если я удаляю оператор if в предложении подписки, он проходит. Однако требуется оператор if, поскольку я хочу, чтобы метод выполнялся только тогда, когда возвращаемое наблюдаемое значение равно true. Что мне нужно сделать / проверить?

Spe c:

it('Should confirm delete before deletion, confirmDeleteRule', async(() => {
    const spyDoDeleteRule = spyOn(component, 'doDeleteRule');
    const spyShowConfirmModal = spyOn(confirmService, 'showConfirmModal').and.returnValue(Observable.of(true));
    component.confirmDeleteRule(new Event('click'), 5);

    fixture.detectChanges();

    expect(spyShowConfirmModal).toHaveBeenCalled();
    expect(spyDoDeleteRule).toHaveBeenCalled();
}));

компонент:

  public confirmDeleteRule(ev: Event, rowIndex: number) {
    const modalConfig: ConfirmModalConfig = new ConfirmModalConfig(
      this.translateService.instant('overlay_group_modal_rule_delete.title'),
      this.translateService.instant('overlay_group_modal_rule_delete.rule_name') + ' ' + this.allRules[rowIndex] +
      this.translateService.instant('overlay_group_modal_rule_delete.prompt'),
      [
        [this.translateService.instant('actions.ok'), ConfirmButtonActions.YES],
        [this.translateService.instant('actions.cancel'), ConfirmButtonActions.CANCEL],
      ],
      ConfirmIcons.WARN,
    );

    this.confirmService.showConfirmModal(modalConfig, true).pipe(
      mergeMap((action: ConfirmButtonActions) => {
        if (action === ConfirmButtonActions.YES) {
          return Observable.of(true);
        } else {
          return Observable.of(false);
        }
      }),
      catchError((err) => {
        throw Observable.of(err);
      }),
    ).subscribe((deleteRule: boolean) => {
      if (deleteRule) {
        this.doDeleteRule(ev, rowIndex);
      }
    });
  }

1 Ответ

0 голосов
/ 26 января 2020

Метод confirmDeleteRule содержит асинхронный код. Помещение await перед строкой, которая вызывает этот метод, должно решить проблему (см. async / await ).

await component.confirmDeleteRule(new Event('click'), 5);
...