Che*_*sea 7 integration-testing rspec ruby-on-rails request-headers 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
Run Code Online (Sandbox Code Playgroud)
在我的请求规范中,我正在做:
page.set_headers("REMOTE_ADDR" => "1.2.3.4")
visit root_path
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道是否有更好的方法,只是能够在请求上设置自定义remote_ip/remote_addr似乎有点过分.有什么想法吗?
如果您希望在所有请求上全局设置标头,您可以使用类似以下内容的内容:
Capybara.register_driver :custom_headers_driver do |app|
Capybara::RackTest::Driver.new(app, :headers => {'HTTP_FOO' => 'foobar'})
end
Run Code Online (Sandbox Code Playgroud)
请参阅rack_test_driver_spec.rbCapybara 1.1.2 和 Capybara 的问题 #320,设置 HTTP 标头。