Aveva lo stesso problema oggi, tranne che avevo bisogno di impostare un referente diverso per test. Ho finito per usare un middleware e una classe per passare le intestazioni ad esso. Ho pensato di condividere (o forse c'è una soluzione più pulita?):
lib/request_headers.rb:
class CustomHeadersHelper
cattr_accessor :headers
end
class RequestHeaders
def initialize(app, helper = nil)
@app, @helper = app, helper
end
def call(env)
if @helper
headers = @helper.headers
if headers.is_a?(Hash)
headers.each do |k,v|
env["HTTP_#{k.upcase.gsub("-", "_")}"] = v
end
end
end
@app.call(env)
end
end
config/initializers/middleware.rb
require 'request_headers'
if %w(test cucumber).include?(Rails.env)
Rails.application.config.middleware.insert_before Rack::Lock, "RequestHeaders", CustomHeadersHelper
end
spec/support/capybara_headers.rb
require 'request_headers'
module CapybaraHeaderHelpers
shared_context "navigating within the site" do
before(:each) { add_headers("Referer" => Capybara.app_host + "/") }
end
def add_headers(custom_headers)
if Capybara.current_driver == :rack_test
custom_headers.each do |name, value|
page.driver.browser.header(name, value)
end
else
CustomHeadersHelper.headers = custom_headers
end
end
end
spec/spec_helper.rb
...
config.include CapybaraHeaderHelpers
allora posso comprendere il contesto condiviso ovunque ho bisogno o passare diverse intestazioni in un altro blocco before
. Non l'ho provato con qualcosa di diverso da Selenium e RackTest, ma dovrebbe essere trasparente, poiché l'iniezione di intestazione viene eseguita prima che la richiesta colpisca effettivamente l'applicazione.
Possibili duplicati: [Intestazioni e Selenium Webdriver 2] (http://stackoverflow.com/q/13047195/841064), [Come inviare un http RequestHeader utilizzando Selenium 2?] (Http://stackoverflow.com/ q/6478672/841064) –
Un altro possibile duplicato: [Come aggiungere intestazioni o parametri a una richiesta HTTP gestita con Selenium Webdriver?] (http://stackoverflow.com/q/10426860/841064) –
Grazie, Andrey. Mi chiedo perché questi non sono stati offerti quando stavo cercando ... – tamouse