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

时间:2014-09-02 13:41:42

标签: capybara

在我的非JS Capybara测试中,我想分配一个cookie。我怎么能这样做?

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

1 个答案:

答案 0 :(得分:7)

解决了它。

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

基于this

如果你需要支持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

可能存在逃避问题,因为它只是插值;尽管如此,我的工作很好。