【问题标题】:Devise helpers are not available in cucumber step definitions设计助手在黄瓜步骤定义中不可用
【发布时间】:2011-10-31 14:22:18
【问题描述】:

我正在使用 cucumber 来测试我的 rails 3.1 应用程序,并且我正在使用 devise 进行身份验证。 我需要测试当前用户电子邮件是否与授权期间使用的电子邮件相同。 问题是设计助手在黄瓜步骤定义中不可用。

是否有任何解决方案可以让设计助手在黄瓜步骤定义中可用?

我试过这个:

Cucumber::Rails::World.send('define_method', 'current_user') do
    @current_user ||= (session[:user] && User.find(session[:user])) || :false
end

但这并没有帮助。

【问题讨论】:

  • 您找到解决方案了吗?我也想知道是否可以。
  • 最后我找不到任何解决方案。授权后,我有一些文本,只有在你被授权的情况下才能看到。所以我只是测试了这个文本的存在。可能这会有所帮助groups.google.com/group/plataformatec-devise/browse_thread/…
  • 感谢您的更新。我在检查元素时处于类似的位置,但感觉这不是做事的好方法。

标签: devise cucumber


【解决方案1】:

将此添加到需要使用它的步骤定义文件中:

World(Devise::TestHelpers)

虽然这使得 'sign_in' 和 'sign_out' 方法可用,但它们实际上不能在 Cucumber 中使用,所以这不起作用。 devise 文件顶部的 cmets 表示“不要在集成测试中使用 Devise::TestHelpers”。见:https://github.com/plataformatec/devise/blob/master/lib/devise/test_helpers.rb

不幸的是,黄瓜步骤无权访问网络请求对象和会话参数。似乎唯一的方法是在每个场景开始时重复执行登录 Web 请求。无聊的。我觉得很奇怪,黄瓜可以直接操作测试轨道应用程序的数据库,但不能直接操作 Web 请求/会话。无论如何,这篇old 帖子展示了一个很好的示例,将步骤重构到一个可以被多个步骤轻松共享的模块中:http://drnicwilliams.com/2009/04/15/cucumber-building-a-better-world-object/

如果其他人对场景如何设置登录状态而无需进行所有水豚网络通话有答案,我很想听听。

【讨论】:

    【解决方案2】:

    您可以这样做以在 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 帮助程序不会在您登录后将您重定向到下一页。它只会让您登录。

    因此,您必须以登录用户的身份明确转到您正在测试的下一页。

    所以你必须做另一个步骤来明确地做到这一点,例如visit '/'

    【讨论】:

      【解决方案3】:

      https://github.com/ngty/cross-stub 可能会有所帮助 - 这允许您跨进程存根方法,这对于黄瓜测试有时是必需的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多