我正在使用 Webrat 为基于 Sinatra 的应用程序编写 Cucumber 测试。对于某些测试,我需要实现一个场景,例如
Given I am logged in as admin
When I am visiting "/"
Then I should see "Settings"
我定义这样的步骤:
Given /^I am logged in as "(.+)"$/ do |user|
visit "/login"
fill_in "login", :with => user
fill_in "password", :with => "123456"
click_button "Login"
end
When /^I am viewing "(.+)"$/ do |url|
visit(url)
end
Then /^I should see "(.+)"$/ do |text|
response_body.should =~ /#{text}/
end
成功时会创建一个 cookie
response.set_cookie(cookie_name, coockie_value)
然后在用户尝试通过辅助方法访问管理页面时在视图中进行验证:
def logged_in?
request.cookies[cookie_name] == cookie_value
end
而且看起来 Webrat 不存储 cookie。测试不报告任何错误,但“logged_in?” 在视图中总是错误的,就像 cookie 没有保存一样。
难道我做错了什么?如果这正是 Webrat 的工作方式,那么最好的解决方法是什么?