如何从Capybara的默认Rack :: Test驱动程序中设置cookie?

Hen*_*k N 4 capybara

在我的非JS Capybara测试中,我想分配一个cookie.我怎样才能做到这一点?

在下面写下我自己的答案.

Hen*_*k N 7

解决了它.

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

基于此.

如果你需要同时支持Rack :: Test和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
Run Code Online (Sandbox Code Playgroud)

可能存在逃避问题,因为它只是插值; 虽然工作得很好.