【发布时间】:2010-01-28 01:30:06
【问题描述】:
我正在使用 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 的工作方式,那么最好的解决方法是什么?
【问题讨论】:
-
您使用的是 Webrat 的原生“浏览器”实现,还是 Selenium 后端?后者实际上在一个单独的进程中运行您的应用程序,这意味着您无法从测试中访问大多数 Rails 状态。
-
emk:谢谢,它适用于 Selenium 后端!
标签: ruby testing sinatra webrat