7

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

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

4

2 回答 2

1

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

于 2012-06-12T03:06:03.887 回答
0

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

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

于 2016-05-04T16:11:42.003 回答