Ruby
Rails
RSpec

Rails Mountable Engineで追加したコントローラーを、本体でテストしたい

rails montable engineでrouteとcontrollerを追加したが、本体のrspecでテストしようとするとこんな感じのエラーがでる。

undefined local variable or method `hogehoge_path' for #<RSpec::ExampleGroups::HogeHoge::POSThogehoge:0x007f8344beaba8>

でもrakeコマンドで確認するとちゃんと設定できている。

bundle exec rake routes | grep hogehoge
# => hogehoge POST /hogehoge/fuga(.:format) hogehoge#fuga

rails_helper.rbでこんな風に呼んであげるとうまく動く。

spec/rails_helper.rb
RSpec.configure do |config|
  config.include Hoge::Engine.routes.url_helpers
end

参考
How to test routes in a Rails 3.1 mountable engine

ちゃんと確認しては無いが、capybaraと一緒に使うとうまく動かないときがある。
そんなときは、使いたいspecファイルのbeforeの中で呼ぶ。

RSpec.describe "HogeHoge", type: :request do
  describe "POST /hogehoge/fuga" do
    before do
      RSpec.configure do |config|
        config.include Hoge::Engine.routes.url_helpers
      end
    end

    it { hogehoge }
  end
end