Edited at

feature specで名前付きルートが使えなかった話

More than 1 year has passed since last update.

Rails 5.0とRSpec 3.6の環境下で、routes.rbconstraintshostを限定した所、一部のfeature specが通らなくなった。


何が起こったのか

以下のようなspecが全部失敗するようになった。

feature 'hoge' do

scenario 'fuga' do
visit piyo_url
expect(page).to have_content('hogera')
end
end

ここでpiyo_urlをputsすると、http://www.example.com/path/to/piyoが返ってきてしまう。そのため、routes.rbhostを絞るとルーティングのエラーになってしまうということだった。

ちなみに、デフォルトのhostは以下のように設定していて、feature spec以外ではlocalhost:3000が返ってくる。


config/environments/test.rb

Rails.application.routes.default_url_options[:host] = 'localhost:3000'



spec/spec_helper.rb

RSpec.configure do |config|

config.include Rails.application.routes.url_helpers
end


どうやって解決したか

あまり綺麗な解決法ではないが、名前付きルートの記述を全て次のように置き換えると、localhost:3000が返ってきた。

# visit piyo_url

visit Rails.application.routes.url_helpers.piyo_url


蛇足

今までリクエスト先がexample.comで返ってくるのにspec自体は通っていたというのが気持ち悪いが、中の挙動までは追えていない…。