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
相关产品推荐
相关产品推荐

