使用茉莉花素进行的直接测试失败。 “预期将调用间谍doDeleteRule。” 我注意到,如果删除了subscribe子句中的if语句,它将通过。但是,if语句是必需的,因为我只希望在返回的可观察值等于true时执行该方法。我还需要做/检查吗?
规格:
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);
}
});
}
答案 0 :(得分:0)
方法confirmDeleteRule
包含异步代码。将await
放在调用此方法的行之前,应该可以解决问题(请参见async/await)。
await component.confirmDeleteRule(new Event('click'), 5);