与Devise和rspec的Rails 3:Warden测试助手不可靠

时间:2012-06-11 20:58:14

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

我有一个使用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?控制的链接有条件的)

我的问题:是否有其他人遇到过这种不可靠性以及如何减轻这种情况?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

虽然一篇旧帖子我也有Rails 4.1和Warden 1.2.3的这个问题。我注意到有一个较新版本的Warden在测试助手上工作。任何人都有新版本的成功吗?

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