如何从水豚的默认机架::测试驱动程序中设置cookie?



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

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

解决了它。

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

基于此。

如果您需要同时支持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

可能存在逃避问题,因为它只是插值的;不过对我的需求来说效果不错。

最新更新