我希望有一个Cucumber功能测试设计的可记忆功能(记住我的cookie)。
使用capybara检查记住我的复选框很容易但是我应该如何模拟关闭窗口后返回网站的用户?
答案 0 :(得分:1)
我提出了以下机架测试黑客,以及稍微清洁的硒api使用,以测试黄瓜/水豚中的Devise remember-me功能。它只是告诉驱动程序手动擦除会话cookie。并非所有驱动程序都受支持,我只实现了我使用过的两个驱动程序:
这假设会话的cookie存储。从场景中删除@announce标记以消除冗长。
Matt Wynne在the mailing list discussion中建议的另一个选项可能是查看其他cookie存储,并通过查询或文件删除删除它们:
从敏捷导轨书中解脱出来:
config.action_controller.session_store = CGI::Session::PStore (or just :p_store)
config.action_controller.session_options[:tmpdir] = "/Users/dave/tmp"
config.action_controller.session_options[:prefix] = "myapp_session_"
或
rake db:sessions:create
config.action_controller.session_store = :active_record_store
Rails也有一个重置会话方法,但我相信我们无权访问这个,因为在使用capybara进行测试时我们无法挂钩到rails会话。
希望这有帮助,
尼克
答案 1 :(得分:1)
nruth的要点非常有用,但我觉得删除名称的cookie是作弊。我创建了一个步骤,删除浏览器在关闭并重新启动时将删除的cookie(任何未设置到期日期且未来设置的cookie)。
你可以在this commit中看到它(虽然我只为RackTest驱动程序做过,因为我没有设置Selenium)。您还可以在this commit中查看我的login / remember_me功能。我重构了这些类来分隔this commit中的文件。
我希望这有用。
答案 2 :(得分:0)
我使用email-spec来完成此任务。我的场景如下所示:
@allow-rescue
Scenario: Create New Account (Everything cool)
Given I am not authenticated
When I go to register
And I fill in "Name" with "bill"
And I fill in "Email" with "bill@example.com"
And I fill in "Password" with "please"
And I fill in "Password Confirmation" with "please"
And I press "Sign up"
Then "bill@example.com" should receive an email
And I open the email
And I should see "Confirm my account" in the email body
When I follow "Confirm my account" in the email
Then I should see "Your account was successfully confirmed. You are now signed in."
请注意使用Devise时必需的场景上方的 @ allow-rescue 装饰。
希望这有帮助。
答案 3 :(得分:0)
我猜你可以用capybara注销,然后重新登录
Given I am on the login screen
And I select 'Remember Me'
And I click 'login'
Then I should be 'logged in'
When I click 'log out'
Then I should be 'logged out' #=> potentially destroy a session here?
When I click log in
Then I should be logged in
And I should not be directed to the login form.
此应该使用cabybara当前的cookie状态来模拟此流程。
答案 4 :(得分:0)
您可以使用show_me_the_cookies进行此操作,如下所示:
And(/^I leave the site$/) do
expire_cookies
end