Rails集成GraphQL编写filter单元测试时resolver无call方法报错
报错根因
你遇到的undefined method 'call' for Resolvers::LinksSearch:Class报错,是因为教程使用的是旧版本的search_object_graphql和graphql gem,旧版本SearchObject封装的Resolver默认提供.call类方法作为执行入口,而新版本配合GraphQL::Schema::Resolver使用时,该方法已经被移除,替换为标准Resolver的.resolve入口。
可行解决方案
方案1:直接修改测试调用方法(最快修复)
修改test/graphql/mutations/resolvers/links_search_test.rb中的find方法,将call替换为resolve即可:
def find(args) Resolvers::LinksSearch.resolve(nil, args, nil) end
方案2:保留原有测试写法,给Resolver补充call方法
如果你不想修改测试代码,可以在app/graphql/resolvers/links_search.rb的Resolvers::LinksSearch类中补充.call类方法兼容旧调用:
class Resolvers::LinksSearch < GraphQL::Schema::Resolver include SearchObject.module(:graphql) # 原有代码不变,新增以下方法 def self.call(object, arguments, context) self.resolve(object, arguments, context) end # ... 原有其他代码 end
额外优化提示
你的测试文件放在test/graphql/mutations/resolvers路径下不符合常规目录规范,resolver不属于mutation范畴,建议移到test/graphql/resolvers目录下避免后续路径混乱。
内容的提问来源于stack exchange,提问作者Peter Dang
相关产品推荐
相关产品推荐

