如何在茉莉花中为可观察的 finally 块编写单元测试 - Angular 2
Posted
技术标签:
【中文标题】如何在茉莉花中为可观察的 finally 块编写单元测试 - Angular 2【英文标题】:How to write a unit test for observable finally block in jasmine - angular 2 【发布时间】:2018-04-13 05:12:00 【问题描述】:我有一个保存方法。
public saveJob(formData: any, redirect: boolean = false): Observable<any>
if (!this.checkJobValidity())
return Observable.of(null);
return this.service.edit(this.job)
.do((data) =>
this.job = data;
)
.switchMap(() => this.service.addCustomer(this.job.id, this.customers)
.do(customers =>
this.customers = customers;
))
.switchMap(() => this.saveJobComment())
.switchMap(() => this.saveJobTasks())
.switchMap(() => this.saveJobProducts(this.jobProducts))
.finally(() =>
const hasInvoiceNumbers: boolean = !!this.jobInvoiceNumbers.find(j => !!j.invoiceNumber);
console.log(this.job.phase && this.isXeroCustomer && !hasInvoiceNumbers);
if (this.job.phase === 'INVOICE' && this.isAutoCustomer)
this.createAutoInvoice();
else if (isManualInvoice)
this.createManualInvoice();
this.messageService.show(
template: 'plain_string',
level: 'success',
context: message: `Job $this.job.code saved successfully.`,
flash: redirect,
timeout: this.config.ALERT_TIMEOUT
);
if (redirect)
this.router.navigate(['/jobs', this.job.id]);
);
我想编写单元测试,看看自动发票是否正常工作。 IE;最后块。我已经模拟了 this.service.edit 和 this.service.addCustomer,我期待如果我模拟所有 switchMap 案例,它最终会出现在我的 finally 块中,我可以对其进行测试。我应该这样做吗?
【问题讨论】:
【参考方案1】:我认为,如果您将 finally 块中的代码提取到一个方法中,您可以更轻松地测试您的代码。您应该能够在 finally 块中检测到针对该方法的间谍的 hasBeenCalled。然后,显然,您可以针对您创建的新方法对其余代码进行单元测试。
【讨论】:
以上是关于如何在茉莉花中为可观察的 finally 块编写单元测试 - Angular 2的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自动布局在 Swift 中为可重用的 UIView 设置约束?
在 Django 项目中为可重用应用程序创建基于类的 Celery 任务