我正在构建一个rspec帮助器来测试我的graphql请求。
到目前为止,这是我的助手:
def mutation_params(name, attributes:, return_types:)
{
query:
<<~GQL
mutation {
#{name}(
input: { attributes: #{attributes} })
#{return_types}
}
GQL
}
end
字符串
我必须这样声明attributes
:
let(:attributes) do
<<~GQL
{
email: "#{email_param}",
password: "#{password_param}"
}
GQL
end
型
现在我想知道我能做些什么来简单地传递我的arguments
作为哈希值,并让mutations_params
方法通过迭代从哈希值构建GQL。
let(:attributes) do
{
email: email_param,
password: password_param
}
end
型
例如:
def mutation_params(name, attributes:, return_types)
gql_attributes = <<~GQL
{
}
GQL
attributes.each do |key, value|
gql_attributes merge with
<<~GQL
"#{key}": "#{value}"
GQL
end
{
query:
<<~GQL
mutation {
#{name}(
input: { attributes: #{gql_attributes} })
#{return_types}
}
GQL
}
end
型
但这显然行不通我想我的问题是我真的不明白<<~GQL
是什么以及如何操作它。
2条答案
按热度按时间vngu2lb81#
您正在寻找Ruby 2.3中引入的弯曲的heredoc。就像一个普通的heredoc但是它去掉了前导缩进。https://ruby-doc.org/core-2.5.0/doc/syntax/literals_rdoc.html
所以换句话说,它只是一个字符串!GQL位是任意的,但却是传达heredoc目的的好方法。
您可以编写一个类似于这样的帮助器来将哈希转换为GraphQL字符串
字符串
然后假设属性是一个散列,就像你的例子中一样,你可以
型
92dk7w1h2#
它稍微冗长一些,但是这个转换将处理嵌套哈希和大多数常见输入数据类型
字符串