黄瓜测试中的cookies使用水豚

作为我对网站的集成测试的一部分,我使用黄瓜和水豚。 似乎水豚不能模仿cookies的使用。

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

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

但是当我稍后使用cookies获取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" 

这是在运行您的function时显示Cookie内容的好方法

https://gist.github.com/484787

这是一个适合我的步骤。 它将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 

你为什么不用selenium进行测试? 只需在要使用真实浏览器运行的场景之前添加@selenium标记。 🙂

截至发布日期,这个要点对我来说不起作用,不过这样做,并且有点简单:

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

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

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

要查看此操作,请查看我的示例Rails应用程序 。