【问题标题】:Rails 3 with Devise and rspec: Warden test helpers unreliable带有 Devise 和 rspec 的 Rails 3:Warden 测试助手不可靠
【发布时间】:2012-06-11 20:58:13
【问题描述】:

我有一个使用 rails 3.2 和 Devise 的应用程序。我有一个使用 rspec 和 Capybara 的请求测试套件。

我已尝试在我的登录助手中使用 Warden 测试助手,而不是让 Capybara 填写登录表单并提交。由于我的测试套件的大小和复杂性,这会在我的测试运行时节省超过一分半钟。

在我的配置中是:

RSpec.configure do |config|
  config.include Warden::Test::Helpers, :type => :request
  config.after :each do
    Warden.test_reset!
  end
end

在上下文中:

let!(:current_user) { FactoryGirl.create(:user) }

background do
  login_as(current_user, :scope => :user)
end

但是,当使用这些配置运行测试套件时,几乎每个测试运行都有一个不同的随机失败请求规范,因为页面呈现为好像用户没有登录一样。(具体来说,由user_signed_in? 条件控制的链接)

我的问题:有没有其他人遇到过这样的不可靠性以及如何缓解?

【问题讨论】:

    标签: ruby-on-rails ruby rspec devise warden


    【解决方案1】:

    最简单的做法就是在before :each 块中使用sign_in 表单。您需要控制器规范中的测试助手,因为它与设计隔离。您在集成测试中没有这个问题。

    【讨论】:

    • 我同意这是最简单的,这就是我现在使用的解决方案。但是,我真的希望那一分半钟中断我的测试。
    • 您是否尝试过将电子邮件/密码发布到user_session_path
    • 是的,selenium 可以正常工作,但是由于 selenium 和 firefox 的一些问题,我们使用不支持直接将数据发布到 URL 的 capybara-webkit。
    【解决方案2】:

    虽然是一篇旧帖子,但我在 Rails 4.1 和 Warden 1.2.3 上也遇到了这个问题。我注意到有一个更新版本的 Warden 用于测试助手的工作。有人用新版本成功了吗?

    顺便说一句,我观察到的行为是 Warden 并不总是通过 login_as 帮助程序成功登录。这会导致我的应用在登录页面上找到自己,而不是它认为应该在的位置。

    【讨论】:

    • 我正在使用 Rails 4.1.16 和 Warden 1.2.6,但这里没有运气。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多