6

Tôi đang khỉ vá Capybara :: Phiên với phương thức set_headers gán cho Capybara :: RackTest :: thuộc tính tùy chọn của trình duyệt (mà tôi đã thay đổi từ attr_reader thành attr_accessor).Cách tốt nhất để đặt tiêu đề yêu cầu tùy chỉnh khi sử dụng Capybara trong thông số yêu cầu RSpec là gì?

Các bản vá lỗi:

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 

Trong yêu cầu spec của tôi, tôi đang làm:

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

này hoạt động, nhưng tôi đang tự hỏi nếu có một cách tốt hơn, nó có vẻ hơi quá mức để chỉ có thể đặt remote_ip/remote_addr tùy chỉnh theo yêu cầu. Có suy nghĩ gì không?

Trả lời

1

Nếu bạn muốn các tiêu đề được thiết lập trên toàn cầu trên tất cả các yêu cầu, bạn có thể sử dụng một cái gì đó như:

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

Xem rack_test_driver_spec.rb trong Capybara 1.1.2 và Capybara của vấn đề # 320, Setting up HTTP headers.

1

Bạn có cần thêm tiêu đề tùy chỉnh vào một yêu cầu cụ thể trong rspec sử dụng capybara không? Tôi đã sử dụng nó trong các bài kiểm tra chấp nhận. Đó là cách tốt nhất để tôi sử dụng có được phương pháp với dữ liệu tiêu đề cụ thể. Bạn có thể đánh giá phần tử cụ thể trên trang phản hồi. Xem ví dụ của tôi bên dưới:

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

Tôi hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan