6

Jestem małpiąca łatką Capybara :: Sesja z metodą set_headers, która przypisuje atrybutowi Capybara :: RackTest :: Browser (który zmieniłem z attr_reader na attr_accessor).Jaki jest najlepszy sposób ustawiania niestandardowych nagłówków żądań podczas korzystania z Capybara w specyfikacji żądań RSpec?

Plastry:

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 

Moim życzeniem specyfikacji, robię:

page.set_headers("REMOTE_ADDR" => "1.2.3.4") 
visit root_path 

To działa, ale zastanawiam się, czy jest jakiś lepszy sposób, że wydaje się nieco przesadny, aby móc ustawić niestandardowy remote_ip/remote_addr na żądanie. jakieś pomysły?

Odpowiedz

1

Jeśli chcesz nagłówki być ustawione globalnie na wszystkich żądań, można użyć coś takiego:

Capybara.register_driver :custom_headers_driver do |app| 
    Capybara::RackTest::Driver.new(app, :headers => {'HTTP_FOO' => 'foobar'}) 
end 

Zobacz rack_test_driver_spec.rb w Kapibara 1.1.2 i kapibary numerze # 320, Setting up HTTP headers.

1

Czy chcesz dodać niestandardowy nagłówek do jednego konkretnego żądania w rspec używając kapibara? Użyłem tego w testach akceptacyjnych. Był to najlepszy sposób dla mnie, aby użyć metody get z konkretnymi danymi nagłówka. Możesz ocenić konkretny element na stronie odpowiedzi. Zobacz mój przykład poniżej:

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']") 

Mam nadzieję, że pomoże.

Powiązane problemy