首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试错误-对象({ message:'error message‘})应等于'error message’

单元测试错误-对象({ message:'error message‘})应等于'error message’
EN

Stack Overflow用户
提问于 2021-02-18 19:31:16
回答 3查看 273关注 0票数 1

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

我不确定这是什么意思--这里的'error message‘怎么不等于'error message’呢?

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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 });
                }
            })
        );
}
EN

回答 3

Stack Overflow用户

发布于 2021-02-18 19:38:08

这意味着您期望的结果是"error message",但您得到的却是一个对象。所以你想要这个:

代码语言:javascript
复制
error message

取而代之的是,你得到了:

代码语言:javascript
复制
{message: 'error message'}

您只需要正确使用该变量,因此它很可能是error.error.message

票数 0
EN

Stack Overflow用户

发布于 2021-02-18 20:03:52

您正在使用以下内容发出一个值:

代码语言:javascript
复制
.and.returnValue(of(errorResponse));

not and error,因此在您的订阅中,您应该在以下位置收到该值:

代码语言:javascript
复制
service.setReconciliationFlag(id, subPostingId, isReconciled).subscribe(
        () => {}, // Here
        (error: any) => { // Not Here
            expect(error.message).toEqual('error message');
            done();
        }
    );

我可能遗漏了一些东西,因为我不知道服务中的代码...无论如何,检查你的间谍,因为它似乎没有正常工作,并绕过了你想要的调用。

我建议在订阅的log.console ()和error()函数中放置一个值,这样你就可以看到你正在接收的东西,或者在测试浏览器的Chrome Dev工具中对其进行调试。

票数 0
EN

Stack Overflow用户

发布于 2021-02-18 20:05:43

让我们来看一下实现

代码语言:javascript
复制
...
switchMap((response: any) => {
      ...
      } else {
        return throwError({ message: response.error }); /// here you are building "error object"
      }
    })
);

和测试

代码语言:javascript
复制
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' }}

因此,如果您确认实现是完全正确的,则应该像这样修复断言

代码语言:javascript
复制
expect(error.message.message).toEqual('error message');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66259070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档