jest + graphql 集成测试显示错误

Posted

技术标签:

【中文标题】jest + graphql 集成测试显示错误【英文标题】:jest + graphql integration tests displaying errors 【发布时间】:2018-03-14 07:09:04 【问题描述】:

我正在针对我的 dbgraphql 服务器编写集成测试。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.patherror.stack 是我的最爱。您可以在error object source 中查看它们的完整列表。

【讨论】:

【参考方案2】:

这与jest无关。[object Object]object.toString()返回,它由错误日志的打印机调用。 如果您想查看object 的详细信息,您需要重写 objecttoString 就像下面的代码:

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 后端不工作

使用 Nuxt 和 Jest 进行集成测试

「CI集成」基于Jest Mock API对业务逻辑集成测试附源码

vue-cli 项目集成 Jest 单元测试

如何为 xunit 集成测试编写 GraphQL 变异查询

Jest学习