routes.rbに以下のような指定がある場合、サブドメインのURLでアクセスする必要があるが、E2Eテストはどうするのか?
constraints subdomain: 'admin' do
get 'path/to/article' => 'articles#index'
end
hosts設定
E2Eテストのためにhosts設定しておく
vagrantのゲストOS側にhostsを設定
次のpluginを利用してVagrantfileにhosts設定を記述
Vagrant.configure(2) do |config|
...
config.vm.provision :hosts do |provisioner|
provisioner.add_host '127.0.0.1', ['admin.example.com']
end
...
end
CircleCI用hosts設定
CircleCI上でのE2Eテストのため、circle.ymlに以下のような設定を記述
machine:
...
hosts:
admin.example.com: 127.0.0.1
capybara設定
ホスト名とポート番号を指定
rspecのテストケース等の中で以下のように指定する
# ホスト名にサブドメインを指定
# ポート番号が自動設定されるのでcurrent_sessionから取得
Capybara.app_host = "http://admin.example.com:#{Capybara.current_session.server.port}"
あとは普通にcapybaraでのE2Eテストを書けばよい