3

作为我对网站的集成测试的一部分,我将黄瓜与水豚一起使用。水豚似乎无法模仿 cookie 的使用。

例如,我在用户登录时设置了 cookie:

    def sign_in(user)
      cookies.permanent.signed[:remember_token] = [user.id, user.salt]
      current_user = user
    end

但是,当我稍后使用 cookies.inspect 获取 cookie 的值时,它会返回 {} 这是水豚的已知限制吗?如果是这种情况,我如何通过多个请求测试登录用户?

我应该添加我的测试:

Scenario: User is signed in when they press Sign In
 Given I have an existing account with email "bob@jones.com" and password "123456"
 And I am on the signin page
 When I fill in "Email" with "bob@jones.com"
 And I fill in "Password" with "123456"
 And I press "Sign In"
 Then I should see "Welcome Bob Jones"
4

5 回答 5

4

这是一个适合我的步骤。它将cookie“admin_cta_choice”设置为等于从输入值派生的模型ID。

Given /I have selected CTA "([^"]+)"/ do |cta_name|
  cta = Cta.find_by_name(cta_name)
  raise "no cta with name '#{cta_name}'" if cta.nil?

  k = "admin_cta_choice"
  v = cta.id

  case Capybara.current_session.driver
  when Capybara::Poltergeist::Driver
    page.driver.set_cookie(k,v)
  when Capybara::RackTest::Driver
    headers = {}
    Rack::Utils.set_cookie_header!(headers,k,v)
    cookie_string = headers['Set-Cookie']
    Capybara.current_session.driver.browser.set_cookie(cookie_string)
  when Capybara::Selenium::Driver
    page.driver.browser.manage.add_cookie(:name=>k, :value=>v)
  else
    raise "no cookie-setter implemented for driver #{Capybara.current_session.driver.class.name}"
  end
end
于 2013-06-21T21:32:40.667 回答
2

这是在运行您的功能时显示 cookie 内容的好方法

https://gist.github.com/484787

于 2010-12-15T14:39:47.183 回答
1

你为什么不直接用 selenium 运行测试呢?只需在要使用真实浏览器运行的场景之前添加@selenium 标签。:)

于 2011-11-15T20:21:33.153 回答
1

截至本文发布之日,该要点对我不起作用,但是确实如此,并且更简单:

http://collectiveidea.com/blog/archives/2012/01/05/capybara-cucumber-and-how-the-cookie-crumbles/

于 2012-02-07T23:14:36.397 回答
0

Capybara 没有用于读取和设置 cookie 的 API。

但是,您可以非常轻松地模拟 Capyabara 的登录 - 只需访问登录链接。这将使您登录,包括为您设置所有 cookie。

要查看实际情况,只需查看我的示例 Rails 应用程序

于 2011-11-29T20:52:15.313 回答