如何使用capybara为黄瓜步骤定义的请求设置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'],以证明它没有通过。如果我使用Web浏览器测试控制器,则会正确打印引用程序。
注意使用get参数的3参数,实际上 将HTTP_REFERER放入控制器观察到的请求环境中,但它似乎以我无法想象的方式扰乱请求出;所有渲染的都是doctype元素。
我正在使用默认的黄瓜驱动程序Cucumber :: RackTest :: Driver,黄瓜-11.3,黄瓜-strip-1.2.0和capybara-1.1.2。
答案 0 :(得分:14)
由于我使用的是Cucumber :: RackTest :: Driver,在撰写本文时,我的解决方案是:
Capybara.current_session.driver.header 'Referer', 'http://example.com'
这个解决方案的灵感来自对水豚的以下未合并拉动请求:
答案 1 :(得分:2)
我不知道黄瓜那么好,但是这个[即调用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