我正在尝试在使用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
答案 0 :(得分:0)
我想通过在包含'test_helper'之前设置ENV [“RAILS_ENV”]来启动需要在不同环境中的授权用户的测试来解决这个问题。然后我将该环境中的session_store
更改为cookie_store。
ENV["RAILS_ENV"] = "test_cs"
require 'test_helper'
end
class ProtectedTest < ActionController::IntegrationTest
# ...
end