Как установить HTTP_REFERER в определениях огурца + capybara?

Как я могу задать заголовок запроса HTTP_REFERER для запроса, сделанного из определения шага огурца, используя capybara?

Попытавшись, я попробовал следующее: ни одна из них не работает:

header 'Referer', 'http://example.com/'
ENV['HTTP_REFERER'] = 'http://example.com/'
get '/', {}, { 'HTTP_REFERER' => 'http://example.com/' }
get '/', nil, { 'HTTP_REFERER' => 'http://example.com/' }
request.env['HTTP_REFERER'] = 'http://example.com/' # raises ArgumentError

visit '/'

Я печатаю request.env ['HTTP_REFERER'] в контроллере, чтобы доказать, что он не проходит. Если я тестирую контроллер с помощью веб-браузера, референт печатается правильно.

Обратите внимание, что использование 3-мерного использования выше, действительно, вызывает HTTP_REFERER в среде запросов, наблюдаемой контроллером, но, похоже, это возмущает запрос так, как я не могу понять; все, что получается, является элементом doctype.

Я использую драйвер окунь по умолчанию, Cucumber:: RackTest:: Driver, с огурцом-1.1.3, cucumber-rails-1.2.0 и capybara-1.1.2.

Ответ 1

Поскольку я использую Cucumber:: RackTest:: Driver, решение для меня на момент написания:

Capybara.current_session.driver.header 'Referer', 'http://example.com'

Это решение было основано на следующем невостребованном запросе на каппибару:

https://github.com/thoughtbot/capybara-webkit/issues/198

Ответ 2

Я не знаю, огурец, что хорошо, но это [т. вызывающий пост вместо посещения "some_path" работает для меня в Rspec, поэтому, возможно, подобное решение может сработать для вас (учитывая, что это также тест интеграции):

it 'correctly updates the last_login_ip attribute' do
  post login_path, { :email => user.email, :password => user.password }, { 'REMOTE_ADDR' => 'some_address' }
  user.reload
  user.last_login_ip.should == 'some_address'
end