我正在使用猴子补丁来修改Capybara::Session,增加一个名为set_headers的方法,它将分配给Capybara::RackTest::Browser的options属性(我将其从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,似乎有点过度。你有什么想法吗?