在graphql-ruby变异查询中传递布尔参数时发生强制错误

k10s72fa  于 2023-03-17  发布在  Ruby
关注(0)|答案(1)|浏览(120)

我有一个简单的graphql-ruby突变:

class Mutations::User::Destroy < Mutations::BaseMutation
  argument :confirm, GraphQL::Types::Boolean, required: true
  payload_type GraphQL::Types::Boolean

  def resolve(confirm:)
    true
  end
end

该突变的父模块为:

module Mutations
  class BaseMutation < GraphQL::Schema::RelayClassicMutation
  # ....

在规范中,我有以下内容:

let(:destroy_query) do
  %(
    mutation UserDestroy($input: DestroyInput!) {
      userDestroy(input: $input)
    }
  )
end

it "works" do
  post "/graphql", params: {query: destroy_query, variables: {"input" => {"confirm" => true}}}

这个查询从graphql-ruby生成一个错误响应:

{"errors"=>[{"extensions"=>{"problems"=>[{"explanation"=>"Could not coerce value \"true\" to Boolean"...estroyInput! was provided invalid value for confirm (Could not coerce value \"true\" to Boolean)"}]}

然而,当我在Apollo Studio中测试查询时,它运行良好。我无法在这里传递查询中的true值。这是一个bug还是我做错了什么?我正在考虑将参数类型更改为自定义的类型,如YES字符串。但如果有人知道其他方法,我将非常感谢您的见解。谢谢。

knsnq2tg

knsnq2tg1#

我看不出DestroyInput是如何被使用的。
我会这么说

%(
    mutation UserDestroy($confirm: Boolean!) {
      userDestroy(confirm: $confirm)
    }
  )
post '/graphql', params: { query, destory_query, variables: { confirm: true } }

你给某个东西命名为“DestoryInput”,但是你从来没有创建一个属性类型来描述它。什么叫做“DestroyInput”?

相关问题