Rails GraphQL测试报错:Queries模块不存在AllUsers方法求助
解决Rails GraphQL测试报错:undefined method `AllUsers' for Queries:Module
核心原因分析
这个报错本质是Rails无法找到Queries::AllUsers类,通常由文件路径不规范、自动加载问题或测试代码语法错误导致。以下是针对性的修复步骤:
1. 确保文件路径符合Rails自动加载规范
Rails的自动加载依赖「驼峰类名对应蛇形文件名+正确目录结构」:
Queries::AllUsers类必须放在app/graphql/queries/all_users.rb路径下- 检查
app/graphql目录是否被Rails自动加载(默认Rails会包含这个目录,若手动修改过config.autoload_paths,需确认配置中包含app/graphql)
2. 修复测试代码的语法错误
你的测试代码存在两处语法问题:
- 描述块缺少逗号:
RSpec.describe Queries::AllUsers type: :request应改为RSpec.describe Queries::AllUsers, type: :request - 请求参数未传入查询字符串:
post '/graphql', params: { query: }应改为post '/graphql', params: { query: query_user }
修复后的测试代码:
require 'rails_helper' RSpec.describe Queries::AllUsers, type: :request do describe 'Query' do it 'Successfully returns all users' do post '/graphql', params: { query: query_user } json = JSON.parse(response.body) data = json['data']['users'] expect(data).to match_array [hash_including('id' => be_present, 'firstName' => be_present, 'lastName' => be_present, 'email' => be_present)] end end def query_user <<~GQL query{ users{ id firstName lastName email } } GQL end end
3. 确认GraphQL Schema已注册查询
确保你的查询字段已在GraphQL Schema中注册:
- 在
app/graphql/types/query_type.rb中添加字段:
module Types class QueryType < Types::BaseObject # 注册users查询,关联到Queries::AllUsers解析器 field :users, resolver: Queries::AllUsers end end
- 确认主Schema文件(如
app/graphql/your_app_schema.rb)引用了QueryType:
class YourAppSchema < GraphQL::Schema query Types::QueryType # 其他配置... end
4. 重启服务器/控制台
如果以上步骤都完成后仍报错,重启Rails服务器或控制台,确保自动加载机制加载最新的类文件。
内容的提问来源于stack exchange,提问作者sas
相关产品推荐
相关产品推荐

