Rails 5.0とRSpec 3.6の環境下で、routes.rb
のconstraintsでhostを限定した所、一部の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.rb
でhostを絞るとルーティングのエラーになってしまうということだった。
ちなみに、デフォルトのhostは以下のように設定していて、feature spec以外では localhost:3000
が返ってくる。
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
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自体は通っていたというのが気持ち悪いが、中の挙動までは追えていない…。