我们有一些使用 Aurelia 框架和 Dialog 插件的 TypeScript 代码,我们正在尝试使用 Jasmine 进行测试,但无法弄清楚如何正确执行。
这是源函数:
openDialog(action: string) {
this._dialogService.open({ viewModel: AddAccountWizard })
.whenClosed(result => {
if (!result.wasCancelled && result.output) {
const step = this.steps.find((i) => i.action === action);
if (step) {
step.isCompleted = true;
}
}
});
}
我们可以创建一个 DialogService 间谍,并轻松验证 open 方法 - 但我们无法弄清楚如何让间谍使用模拟结果参数调用 whenClosed 方法,以便我们可以断言该步骤已完成。
这是当前的 Jasmine 代码:
it("opens a dialog when clicking on incomplete bank account", async done => {
// arrange
arrangeMemberVerificationStatus();
await component.create(bootstrap);
const vm = component.viewModel as GettingStartedCustomElement;
dialogService.open.and.callFake(() => {
return { whenClosed: () => Promise.resolve({})};
});
// act
$(".link, .-arrow")[0].click();
// assert
expect(dialogService.open).toHaveBeenCalledWith({ viewModel: AddAccountWizard });
expect(vm.steps[2].isCompleted).toBeTruthy(); // FAILS
done();
});