同じ名前のグローバルコントローラがある場合、名前空間コントローラのコントローラ仕様を作成するときに奇妙な問題があります。Rspecコントローラ仕様の名前空間コントローラで同じ名前のグローバルコントローラが見つかりました
コントローラ名は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
私は例えば、他の何かに私のグローバルHomeController
に名前を変更する場合はNotMyHomeController
テストは私がいることを疑うになり
Unable to autoload constant HomeController, expected app/controllers/home_controller.rb to define it
を言って、エラーで失敗するようになります。 Rspecは、Rspec.describe
関数の "バックエンド"の部分を気にしません。
何か間違っているのですか他の重要な部分がありませんか? IMHO、この仕様は(Gandalfの言い換えに)渡すべきではありません。マックスが指摘したように、私はRailsの4.2.6を使用してい
、RSpecの-Railsの3.4.2
更新
が、これは代わりにRailsの自動ロードで何かRSpecの問題ではおそらくありませんが。
しかし私はRailsのコンソールで
Backend::HomeController
を入力してみましたが、私は、コンソールおよびテストスイートのオートロードの両方、
NameError: uninitialized constant Backend::HomeController
そしてaccording to the Rails guide予想されるエラーをそこに着きます。しかし、私はここで正しい道にいると思う。
I Railsのオートローダが何かをやっていると思っています。これは通常、 'NameError:uninitialized constant Backend :: HomeController'を生成した' Object.const_missing'をmonkeypatchすることによって動作します。それはRSpecにはほとんどない。 – max
ありがとうございました。 Railsオートローダをさらに調べる方法について提案はありますか? –
http://guides.rubyonrails.org/autoloading_and_reloading_constants.html – max