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

RSpec测试Api::V1::CategoriesController时出现NameError错误排查求助

解决RSpec测试中"uninitialized constant CategoriesController"错误

我一眼就看出问题所在了——你的CategoriesController是嵌套在Api::V1命名空间下的,但测试代码里直接引用了顶层的CategoriesController常量,Ruby找不到这个类,所以抛出了NameError。

快速修复方法

直接修改测试文件里的控制器描述,加上完整的命名空间:

# spec/controllers/api/v1/categories_controller_spec.rb
require 'rails_helper'
# 这里要写完整的命名空间类名
RSpec.describe Api::V1::CategoriesController, type: :controller do
  describe "GET index" do
    it 'has a 200 status code' do
      get :index
      expect(response.status).to eq(200)
    end
  end
end

额外需要确认的细节

  • 路由配置检查
    确保config/routes.rb里正确配置了Api V1的命名空间路由,这样控制器才能正确响应请求:
    namespace :api do
      namespace :v1 do
        resources :categories
      end
    end
    
  • 代码风格优化(非必须)
    把测试里的type => :controller改成Ruby 1.9+推荐的type: :controller写法,让代码更规范。

错误原因详解

Ruby的常量查找是从当前作用域开始的,你的测试文件没有嵌套在Api::V1模块中,所以直接写CategoriesController会在全局作用域查找,而你的控制器类是定义在Api::V1这个嵌套模块内部的,必须使用完整的常量路径Api::V1::CategoriesController才能正确找到它。

内容的提问来源于stack exchange,提问作者Dérik Barcellos Favoretti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:49:05