Я не уверен в предполагаемом использовании default_host
, но app_host
делает то, что вам нужно. Я обнаружил, что сначала мне нужно вызвать метод сеанса rails host!
, чтобы установить строку хоста, которая будет передаваться контроллерам в объекте запроса.
Затем вам нужно установить Capybara.app_host
, чтобы сказать Capybara, чтобы он вызывал ваше приложение через веб-сервер, а не просто выполнял вызовы в процессе. Если вы этого не сделаете, то при обнаружении перенаправлений Capybara отключится и сбросит информацию о хосте во втором запросе.
Я не уверен, почему это не заботится о конце Rails request
автоматически, но я обнаружил, что если я не установлю хост в обоих местах явно, то я получу противоречивые результаты.
def set_host (host)
host! host
Capybara.app_host = "http://" + host
end
before(:each) do
set_host "lvh.me:3000"
end
Тогда вы можете просто использовать относительные пути для доступа к страницам.
Обновление:
Capybara 2.x и rspec-rails 2.12.0 представили спецификации "Feature" для запуска приемочных испытаний Capybara. Новый модуль FeatureExampleGroup
в rspec-rails
отличается от RequestExampleGroup
и больше не имеет доступа к методу host!
теста в стойке. Теперь вы хотите использовать default_url_options
вместо:
def set_host (host)
# host! host
default_url_options[:host] = host
Capybara.app_host = "http://" + host
end