小编Jac*_*tad的帖子

命名空间控制器上的Rspec控制器规范找到具有相同名称的全局控制器

当存在具有相同名称的全局控制器时,为命名空间控制器创建控制器规范时,我有一个奇怪的问题.

控制器名称是HomeControllerBackend::HomeController.

请注意,我尚未创建该文件app/controllers/backend/home_controller.rb,只存在全局控制器app/controllers/home_controller.rb

因此,我希望测试会出现错误,但事实并非如此.它通过,全是绿色和快乐.

我的规格看起来像这样

#spec/controllers/backend/home_controller_spec.rb
require 'rails_helper'

RSpec.describe Backend::HomeController, type: :controller do
  before do
    user = FactoryGirl.create(:user)
    allow(controller).to receive(:authenticate_user!).and_return(true)
    allow(controller).to receive(:current_user).and_return(user)
  end
  describe "GET #index" do
    it "returns http success" do
      get :index
      expect(response).to have_http_status(:success)
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

但是,如果我将全局中的名称更改为其他名称HomeController,例如NotMyHomeController测试失败并显示错误

Unable to autoload constant HomeController, expected app/controllers/home_controller.rb to define it
Run Code Online (Sandbox Code Playgroud)

这让我怀疑Rspec不会打扰Rspec.describe函数中的"Backend"部分.

我做错了什么还是我错过了其他一些重要的部分?恕我直言,这个规范不应该通过(用Gandalf的话来说).

我正在使用Rails 4.2.6,Rspec-Rails 3.4.2

更新

正如Max指出的那样,这可能不是Rspec问题,而是Rails自动加载.

但是我试着打字

Backend::HomeController
Run Code Online (Sandbox Code Playgroud)

在Rails控制台中,但我得到了预期的错误

NameError: uninitialized constant Backend::HomeController
Run Code Online (Sandbox Code Playgroud)

而 …

ruby rspec ruby-on-rails rspec-rails

5
推荐指数
1
解决办法
771
查看次数

标签 统计

rspec ×1

rspec-rails ×1

ruby ×1

ruby-on-rails ×1