如何在黄瓜+水豚步骤定义中设置HTTP_REFERER



我如何设置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 '/'

打印请求。env['HTTP_REFERER']在控制器中,以证明它没有通过。如果我用web浏览器测试控制器,则可以正确打印referer。

注意上面get的3参数使用,实际上确实使HTTP_REFERER进入控制器观察到的请求环境,但它似乎以一种我无法弄清楚的方式干扰了请求;所呈现的只是一个doctype元素。

我使用默认的黄瓜驱动程序,cucumber::RackTest:: driver,其中包含cucumber-1.1.3, cucumber-rails-1.2.0和capybara-1.1.2。

由于我使用的是Cucumber::RackTest::Driver,因此在撰写本文时,我的解决方案是:

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

这个解决方案的灵感来自于capybara上的以下未合并的pull请求:

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

我不太了解Cucumber,但这[即调用post而不是访问'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

最新更新