我正在尝试编写一个单元测试,如果该方法失败,则会显示一条错误消息,但我得到了这个错误:

我不确定这是什么意思--这里的'error message‘怎么不等于'error message’呢?
it('should return error when unable to update Reconciliation Flag', (done) => {
const id = '26949';
const subPostingId = '0';
const isReconciled = 'false';
const errorResponse = { error: { message: 'error message' } };
spyBmlService.get
.withArgs(BmlRequest.SetReconciled, {
bwtxnid: id,
bwpostingid: subPostingId,
isreconciled: isReconciled,
})
.and.returnValue(of(errorResponse));
service.setReconciliationFlag(id, subPostingId, isReconciled).subscribe(
() => {},
(error: any) => {
expect(error.message).toEqual('error message');
done();
}
);
});setReconciliationFlag代码:
public setReconciliationFlag(
id: string,
subPostingId: string,
isReconciled: string
): Observable<any> {
return this.bmlService
.get(BmlRequest.SetReconciled, {
bwtxnid: id,
bwpostingid: subPostingId,
isreconciled: isReconciled,
})
.pipe(
switchMap((response: any) => {
if (!response.error) {
return of(response);
} else {
return throwError({ message: response.error });
}
})
);
}发布于 2021-02-18 19:38:08
这意味着您期望的结果是"error message",但您得到的却是一个对象。所以你想要这个:
error message取而代之的是,你得到了:
{message: 'error message'}您只需要正确使用该变量,因此它很可能是error.error.message
发布于 2021-02-18 20:03:52
您正在使用以下内容发出一个值:
.and.returnValue(of(errorResponse));not and error,因此在您的订阅中,您应该在以下位置收到该值:
service.setReconciliationFlag(id, subPostingId, isReconciled).subscribe(
() => {}, // Here
(error: any) => { // Not Here
expect(error.message).toEqual('error message');
done();
}
);我可能遗漏了一些东西,因为我不知道服务中的代码...无论如何,检查你的间谍,因为它似乎没有正常工作,并绕过了你想要的调用。
我建议在订阅的log.console ()和error()函数中放置一个值,这样你就可以看到你正在接收的东西,或者在测试浏览器的Chrome Dev工具中对其进行调试。
发布于 2021-02-18 20:05:43
让我们来看一下实现
...
switchMap((response: any) => {
...
} else {
return throwError({ message: response.error }); /// here you are building "error object"
}
})
);和测试
const errorResponse = { error: { message: 'error message' } };
...
.and.returnValue(of(errorResponse));
...
(error: any) => {
expect(error.message).toEqual('error message');我不确定是实现不是很好,还是在测试中存在误解,但产生的错误对象将是这样的{ message: /* here starts what bmlService.get returns */ { message: 'error message' }}
因此,如果您确认实现是完全正确的,则应该像这样修复断言
expect(error.message.message).toEqual('error message');https://stackoverflow.com/questions/66259070
复制相似问题