我有一个使用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?
控制的链接有条件的)
我的问题:是否有其他人遇到过这种不可靠性以及如何减轻这种情况?
答案 0 :(得分:1)
绝对最简单的方法就是使用before :each
块中的sign_in表单。您需要Controller规范中的测试助手,因为它与设计隔离。您在集成测试中没有这个问题。
答案 1 :(得分:0)
虽然一篇旧帖子我也有Rails 4.1和Warden 1.2.3的这个问题。我注意到有一个较新版本的Warden在测试助手上工作。任何人都有新版本的成功吗?
顺便说一下,我观察到的行为是Warden并不总是通过login_as助手成功登录。这导致我的应用程序在登录页面上找到自己,而不是它认为应该的位置。