我是猴子修補Capybara :: Session的set_headers方法,分配給Capybara :: RackTest :: Browser的選項屬性(我已經從attr_reader更改爲attr_accessor)。在RSpec請求規格中使用Capybara時,設置自定義請求標頭的最佳方式是什麼?
補丁:
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。有什麼想法嗎?