Как установить HTTP_REFERER в определениях шагов огурец + капибара? - PullRequest
11 голосов
/ 06 декабря 2011

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

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

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'] в контроллере, чтобы доказать, что он не проходит. Если я тестирую контроллер с помощью веб-браузера, реферер печатается правильно.

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

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

Ответы [ 2 ]

14 голосов
/ 06 декабря 2011

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

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

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

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

2 голосов
/ 06 декабря 2011

Я не очень хорошо знаю Cucumber, но этот [то есть вызывающий пост вместо посещения '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
...