我正在使用该graphql-go
库以及graphql-go/relay
. 我正在尝试为我的 API 编写一些基本测试,并且在使用 base64 编码机制时遇到了一些问题。当我对查看器 id 执行简单查询时,查看器编码的 id 是错误的。
我正在硬编码 db 调用以检索具有 id 的第一个用户1
:
func TestGetViewer(t *testing.T) {
// Empty and fill the db for consistency
prepDb()
query := `
query {
viewer {
id
}
}
`
// The schema contains a viewer entry point that returns a userType:
// userType = graphql.NewObject(graphql.ObjectConfig{
// Name: "User",
// Description: "A user",
// Fields: graphql.Fields{
// "id": relay.GlobalIDField("User", nil),
// },
// })
schema := gql.NewSchema(db)
// graphql.Do is called by graphql.Execute. I'm trying to get
// closer to what is actually called in order to debug
result := graphql.Do(graphql.Params{
Schema: schema,
RequestString: query,
})
// The return data from our query
data := result.Data.(map[string]interface{})
// The relay.GlobalIDField in our schema should be calling this method
// under the hood, however, as you'll see it returns something different
id := relay.ToGlobalID("User", "1")
// prints map[viewer:map[id:VXNlcjo= username:janedoe]]
// notice the last character of the id
fmt.Println(data)
// prints VXNlcjox
fmt.Println(id)
graphql.Do 返回的内容非常接近,但编码 id 的最后一个字符与relay.ToGlobalID
. 而是显示最后一个用 . 填充的字符=
。当我尝试运行时relay.FromGlobalID("VXNlcjo=")
,它能够确定它type
是User
,但它返回一个空字符串ID
。然而,如果我用 替换=
,x
它会返回正确的对象。
我是 Go 和这些概念的新手,所以任何想法或帮助将不胜感激!