在RSpec请求规范中使用Capybara时,设置自定义请求标头的最佳方法是什么?
我正在使用set_headers方法修补Capybara :: Session,该方法分配给Capybara :: RackTest :: Browser的选项属性(我已经从attr_reader更改为attr_accessor)。
补丁:
class Capybara::RackTest::Browser attr_accessor :options end class Capybara::Session def set_headers(headers) if driver.browser.respond_to?(:options=) #because we've monkey patched it above options = driver.browser.options if options.nil? || options[:headers].nil? options ||= {} options[:headers] = headers else options[:headers].merge!(headers) end else raise Capybara::NotSupportedByDriverError end end end
在我的请求规范中,我正在做:
page.set_headers("REMOTE_ADDR" => "1.2.3.4") visit root_path
这有效,但我想知道是否有更好的方法,只是能够在请求上设置自定义remote_ip / remote_addr似乎有点过分。 有什么想法吗?
如果您希望在所有请求上全局设置标头,您可以使用以下内容:
Capybara.register_driver :custom_headers_driver do |app| Capybara::RackTest::Driver.new(app, :headers => {'HTTP_FOO' => 'foobar'}) end
请参阅rack_test_driver_spec.rb
1.1.2中的rack_test_driver_spec.rb
和rack_test_driver_spec.rb
的问题#320, 设置HTTP标头 。
您是否需要使用capybara将自定义标头添加到rspec中的一个特定请求中? 我在验收测试中使用过它。 这是我使用特定标头数据的get方法的最佳方式。 您可以在响应页面上评估特定元素。 请参阅下面的示例:
get user_registration_path, { :invite => invite_token }, { 'X_GEOIP_COUNTRY_CODE' => 'US' } expect(assigns(:ip_country)).to eq('US') response.body.should have_selector("input#currency_usd[checked='checked']")
我希望它有所帮助。
- Ruby on Rails 3 + Rspec + Capybara:检查响应状态
- 运行规范时出现的描述性错误,取决于种子
- Capybara :: Webkit :: Driver的未定义方法accept_modal
- 为什么我不建议“在全球范围内包括Capybara :: DSL!”
- Capybara增加最大允许页面加载时间
- 来自水豚的弃权警告
- 为什么在后钩中添加“sleep 1”会导致此Rspec / Capybara测试通过?
- 是否可以在Heroku Cedar上运行capybara-webkit(即forked webkit_server)?
- RSpec + Capybara请求规格w / JS无法正常工作