jest + graphql 集成测试显示错误
Posted
技术标签:
【中文标题】jest + graphql 集成测试显示错误【英文标题】:jest + graphql integration tests displaying errors 【发布时间】:2018-03-14 07:09:04 【问题描述】:我正在针对我的 db
和 graphql
服务器编写集成测试。jest
是我的测试运行程序和断言库。
对于每个测试,我确认我没有任何错误:
const actual = await graphql(schema, query);
expect(actual.errors).toBeUndefined();
当我的测试失败时(一路上出现问题),actual.errors
不是 undefined
,我希望 jest
显示错误,
但这就是我得到的:
Expected value to be undefined, instead received
[[GraphQLError: Invalid value [object Object]]]
如果我看不到“无效值”是什么,则此错误消息毫无用处。
如何配置jest
使其打印错误对象?
【问题讨论】:
【参考方案1】:错误消息是GraphQLError: Invalid value [object Object]
,当您打算传递对象时,您可能正在传递字符串[object Object]
。或者你的模式有一个字符串,你认为它有一个对象,或者当你应该传递一个字符串时你正在传递一个对象。如果没有您的架构、查询或根,我只是在猜测。
graphql 对象有一些不会自动记录的属性。然而,它们确实有助于调试。 error.path
和 error.stack
是我的最爱。您可以在error object source 中查看它们的完整列表。
【讨论】:
【参考方案2】:这与jest
无关。[object Object]
由object.toString()
返回,它由错误日志的打印机调用。
如果您想查看object
的详细信息,您需要重写 object
的toString
就像下面的代码:
obj = x:"x";
alert(obj)
obj.toString = function()return JSON.stringify(obj);
alert(obj)
【讨论】:
为了做到这一点,我需要覆盖语言Object
,这是一个非常糟糕的主意......
是的,覆盖原生Object
是个坏主意,但是您可以覆盖要打印的对象,覆盖toString()
是一种通用的java 登录方法,参考: ***.com/questions/10734106/…。我把它比作 javascript。以上是关于jest + graphql 集成测试显示错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jest 对 Relay 容器的集成测试与工作中的 GraphQL 后端不工作