无法使用Rails 3.1 / Authlogic / ActiveRecord会话存储进行集成测试中的授权用户

时间:2011-11-14 12:29:44

标签: ruby-on-rails ruby-on-rails-3 integration-testing authlogic session-store

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

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

这确实创建了一个会话(由UserSession.find证明),但是当对受保护资源执行get请求时,响应将是重定向到登录表单并且会话被终止(即。 UserSession.find将返回nil

我也试过发布电子邮件/密码,但是如果我将会话存储更改回cookie_store(我从this comment找到的东西),那似乎只能

只是为了测试而将会话存储切换到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

1 个答案:

答案 0 :(得分:0)

Dear people from the future:

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

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

class ProtectedTest < ActionController::IntegrationTest
  # ...
end