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

Dan*_*ans 7 ruby rspec ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

并在上下文中:

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

background do
  login_as(current_user, :scope => :user)
end
Run Code Online (Sandbox Code Playgroud)

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

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

DVG*_*DVG 1

最简单的方法就是在您的before :each区块中使用sign_in 表单。您需要控制器规范中的测试助手,因为它与设备隔离。在集成测试中你不会遇到这个问题。