我正在使用黄瓜来测试我的rails 3.1应用程序,我正在使用设计进行身份验证。 我需要测试当前用户电子邮件是否与授权期间使用的电子邮件相同。 问题是黄瓜步骤定义中没有设计助手。
是否有任何解决方案可以在黄瓜步骤定义中使用设计助手?
我试过这个:
Cucumber::Rails::World.send('define_method', 'current_user') do
@current_user ||= (session[:user] && User.find(session[:user])) || :false
end
但这没有帮助。
答案 0 :(得分:7)
将此添加到需要使用它的步骤定义文件中:
World(Devise::TestHelpers)
虽然这使得'sign_in'和'sign_out'方法可用,但它们实际上不能用于Cucumber,所以不工作。 devise文件顶部的注释说“不要在集成测试中使用Devise :: TestHelpers”。请参阅:https://github.com/plataformatec/devise/blob/master/lib/devise/test_helpers.rb
不幸的是,黄瓜步骤无法访问Web请求对象和会话参数。看来,执行此操作的唯一方法是在每个方案开始时重复执行登录Web请求。无聊。我觉得奇怪的是,黄瓜可以直接操作测试rails应用程序的数据库,但不能直接操作web请求/会话。在任何情况下,此旧帖子都显示了一个很好的示例,即重构模板中的步骤可以轻松地通过多个步骤共享:http://drnicwilliams.com/2009/04/15/cucumber-building-a-better-world-object/
如果其他人对方案如何设置登录状态有答案而无需进行所有的水豚网络电话,我很乐意听到。
答案 1 :(得分:0)
可能有帮助的东西是https://github.com/ngty/cross-stub - 这允许您存储交叉过程的方法,这有时是黄瓜测试所必需的
答案 2 :(得分:0)
你可以这样做以在Cucumber中存根登录: https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara
将这些行放在support / env.rb中:
include Warden::Test::Helpers
After do
Warden.test_reset!
end
然后你可以这样做:
user = create :user
login_as :user, scope: :user
但是,login_as
帮助程序在您登录后不会将您重定向到下一页。它只会让您登录。</ p>
因此,您必须明确转到您作为登录用户进行测试的下一页。
所以你必须采取另一个步骤明确地做到这一点,例如visit '/'