Rails Engine を RSpec でアレしてたら controller spec で No route matches が出まくって困った

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

通りました。