单元测试验证方法失败返回错误提示时出现Expected Object断言报错如何解决
报错原因定位
这个报错的核心是断言比对的两个值结构、类型不匹配,根源在被测方法的错误抛出逻辑多嵌套了一层结构,和测试的预期对不上。
完整问题链路
- 测试里mock的接口返回值结构是
{ error: { message: 'error message' } } - 被测方法的
switchMap分支检测到返回值包含error后,执行了抛错逻辑:
这里的return throwError({ message: response.error });response.error本身就是{ message: 'error message' }对象,最终实际抛出的错误对象结构为:{ message: { message: 'error message' } } - 测试的错误回调拿到这个对象后,执行
expect(error.message).toEqual('error message')时,取到的error.message是嵌套的整个对象,并不是你预期的纯字符串'error message',自然会触发“期望对象等于字符串”的报错。
修正方案
根据你实际的错误封装逻辑二选一调整即可:
- 如果需要统一抛出带
message属性的错误结构,只需要修正取值层级,拿到嵌套的纯文本错误信息:
调整后抛出的error结构为// 替换原抛错的代码行 return throwError({ message: response.error.message });{ message: 'error message' },error.message就是预期的纯字符串,和现有测试断言完全匹配。 - 如果不需要额外包装错误,直接把接口返回的error原样抛出即可:
这种情况下抛出的error本身就是// 替换原抛错的代码行 return throwError(response.error);{ message: 'error message' }结构,现有测试里的expect(error.message).toEqual('error message')也可以正常通过。
内容的提问来源于stack exchange,提问作者user123456789
相关产品推荐
相关产品推荐

