Rails Engine を RSpec でアレしてたら controller spec で No route matches が出まくって困った
rails plugin new --mountable
からつくる Rails プラグイン作成を試しています。
自動テストにはいつも RSpec を使っているので使えるように調整して model spec は問題なく終了したのですが、controller spec でひっかかりました。
generate にまかせた spec で
module ChatPlug RSpec.describe RoomsController, :type => :controller do describe "GET new" do it "returns http success" do get :new expect(response).to have_http_status(:success) end end # 略 end end
rspec すると以下の感じで死亡。
1) ChatPlug::RoomsController GET new returns http success Failure/Error: get :new ActionController::UrlGenerationError: No route matches {:action=>"new", :controller=>"chat_plug/rooms"} # ./spec/controllers/chat_plug/rooms_controller_spec.rb:8:in `block (3 levels) in <module:ChatPlug>'
以下のページに 3 つの解決法が提示されていたので、routes { EngineName::Engine.routes }
を追記するやつを選びました。
module ChatPlug RSpec.describe RoomsController, :type => :controller do # 追記部 routes { ChatPlug::Engine.routes } describe "GET new" do it "returns http success" do get :new expect(response).to have_http_status(:success) end end # 略 end end
通りました。