当存在具有相同名称的全局控制器时,为命名空间控制器创建控制器规范时,我有一个奇怪的问题.
控制器名称是HomeController和Backend::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)
而 …