我有一个组件属性,该属性在订阅的可观察对象的下一个方法中更新,表示 http 事件的上传进度。在为此方法编写单元测试时,我希望
我有一个组件属性,它在我订阅的可观察对象的方法中更新 next
,该方法表示 http 事件的上传进度。在为此方法编写单元测试时,我想编写一个测试来检查订阅 http 事件时该属性是否已更新。
我编写的测试是:
it('Should display progress bar', async () => {
mockFileTransferService.uploadQuarantineFile.and.returnValue(
of(
{
body: ['blodId1'],
type: 1,
total: 50,
loaded: 100,
},
{
body: ['blodId1'],
type: 1,
total: 100,
loaded: 100,
})
);
component.onUpload();
expect(component.uploadProgress).toBe(NumberConstant.FIFTY);
});
组件的 onUpload()
方法:
onUpload() {
const upload$ = this.fileTransferService.uploadQuarantineFile(this.formData)
.pipe(
finalize(() => this.reset())
);
// tslint:disable-next-line:no-any
this.subscription.add(upload$.subscribe((e: any) => {
if (e.type === HttpEventType.UploadProgress && e.total) {
this.uploadProgress = Math.round((e.loaded / e.total) * NumberConstant.ONE_HUNDRED);
}
if (e.type === HttpEventType.Response) {
this.messageBarService.openMessageBar(
MessageBarStatesEnum.success,
'File Uploaded successfully.',
''
);
}
}, (error: HttpErrorResponse) => {
this.error = true;
this.errorMessage = error.message;
this.trackingService.logTrace(error.message);
}));
}
我的单元测试由于以下原因失败: Expected 0 to be 50.
看来 finalize()
在我测试组件的 uploadProgress
属性之前该方法就被调用了,因为 this.reset
该 finalize()
方法 uploadProgress
值为 0。
如何在调用 finalize() 之前测试由可观察回调更新的 Angular 组件属性值?
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!