という地獄の話です。
spec_helper.rb に以下のようなことを書きます。
s = TCPServer.open(0)
CAPYBARA_PORT = s.addr[1]
s.close
Capybara.server_port = CAPYBARA_PORT
テストの中では以下のようにします。
# サブドメインつかない時のテスト
Capybara.app_host = "http://localhost:#{CAPYBARA_PORT}"
visit '/hogehoge'
# サブドメインでのテスト
Capybara.app_host = "http://subdomain.localhost:#{CAPYBARA_PORT}"
visit '/hogehoge'