How to set cookie from Capibara default Rack :: Test driver?

In my non-JS Capybara tests, I want to assign a cookie. How can i do this?

Wrote my own answer below.

+3


source to share


1 answer


I decided.

headers = {}
Rack::Utils.set_cookie_header!(headers, name, value)
cookie_string = headers["Set-Cookie"]
Capybara.current_session.driver.browser.set_cookie cookie_string

      

Based on this .



If you need to support both Rack :: Test and Poltergeist:

def set_cookie(name, value)
  if Capybara.current_session.driver.respond_to?(:set_cookie)
    # Poltergeist driver (JS)
    Capybara.current_session.driver.set_cookie(name, value)
  else
    # Rack::Test driver (non-JS)
    headers = {}
    Rack::Utils.set_cookie_header!(headers, name, value)
    cookie_string = headers["Set-Cookie"]
    Capybara.current_session.driver.browser.set_cookie cookie_string
  end
end

      

There may be problems with escaping as it is simply interpolated; worked great for my needs.

+7


source







All Articles