RSpec サブドメインのテスト

RSpec でサブドメインを対象としたテストを実行したい場合、通常の名前付きルート xxx_path だとサブドメインと認識されないので xxx_url を使う必要がある。

具体的には下記のように書く必要がある。

describe 'Test' do
  before { get xxx_url(host: 'subdomain.lvh.me') }
  it { ... }
end

host: 'subdomain.lvh.me' をイチイチ書くのはだるいという場合 default_url_options が使える。

Capybara.current_session.server&.port とポート指定しているのはヘッドレスChromeによるテストを行うときに必要だから。

describe 'Test' do
  before do
    default_url_options[:host] = "subdomain.lvh.me:#{Capybara.current_session.server&.port}"
  end

  it 'test 1' do
    before { visit xxx_url }
    it { ... }
  end

  it 'test 2' do
    before { visit xxx_url }
    it { ... }
  end
end