You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中注册:

  1. 在app/graphql/types/query_type.rb中添加字段:
module Types
  class QueryType < Types::BaseObject
    # 注册users查询,关联到Queries::AllUsers解析器
    field :users, resolver: Queries::AllUsers
  end
end
  1. 确认主Schema文件(如app/graphql/your_app_schema.rb)引用了QueryType:
class YourAppSchema < GraphQL::Schema
  query Types::QueryType
  # 其他配置...
end

4. 重启服务器/控制台

如果以上步骤都完成后仍报错,重启Rails服务器或控制台,确保自动加载机制加载最新的类文件。

内容的提问来源于stack exchange,提问作者sas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:01:39