Прямой тест не пройден с использованием жасмина. «Ожидается, что шпион 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);
}
});
}