3

我正在尝试在使用 Authlogic 和 ActiveRecord SessionStore 的 Rails 3.1 应用程序上编写一个简单的集成测试,但我碰壁了。

首先,我尝试了一种经典方法:在确保该require "authlogic/test_case"行已经在我们的行中之后,test_helper.rb我编写了一个 setup 方法,该方法调用activate_authlogic然后用于UserSession(@user)创建会话。

这确实创建了UserSession.find一个get会话(UserSession.findnil

我也尝试过 POST 电子邮件/密码,但这似乎只有在我将会话存储更改回 cookie_store 时才有效(这是我从这个评论中发现的)。

将会话存储切换为CookieStore仅用于测试是一种选择,但有些测试已经依赖于 ActiveRecord 存储。

有什么方法可以只为一次测试切换会话存储吗?我缺少这个问题的其他解决方案吗?

require 'test_helper'

class ProtectedTest < ActionController::IntegrationTest
  def setup
    activate_authlogic
    @user = Factory(:user, :roles => 'user')
    UserSession.create(@user)
  end

  def test_protected
    https!
    get '/protected'
    assert_response :success
  end
end
4

1 回答 1

0

来自未来的亲爱的人们:

我通过在包含'test_helper'之前设置ENV [“RAILS_ENV”]来启动需要授权用户在不同环境中的测试来解决这个问题。然后我session_store在那个环境中更改为 cookie_store。

ENV["RAILS_ENV"] = "test_cs"
require 'test_helper'
end

class ProtectedTest < ActionController::IntegrationTest
  # ...
end
于 2011-11-18T09:26:18.333 回答