2011-09-08 94 views
1

我正在从3.0.10升级到Rails 3.1.0,我正在使用Devise进行身份验证。stringify_keys在功能测试中补充会话变量后出错

我有一些功能测试,需要我设置一个会话变量。沿线的东西:

test "new clears current_lesson_id from session" do 
    get :new, nil, {'current_lesson_id' => '234234'} 
    assert_response :success 
    assert_nil session[:current_lesson_id] 
end 

这是没有我的会话信息被重挫的色器件认证会话数据,所以我以前的解决方案是使用默认的会议合并:

test "new clears current_lesson_id from session" do 
    get :new, nil, authenticated_sesion_with({'current_lesson_id' => '234234'}) 
    assert_response :success 
    assert_nil session[:current_lesson_id] 
end 

def authenticated_session_with(hash) 
    session.merge(hash) 
end 

所有这一切在rails 3.0.10(warden 1.0.4和devise 1.4.2)下运行良好,但不再使用rails 3.1.0(和warden 1.0.5,devise 1.4.4)。现在我发现了以下错误:

NoMethodError: private method `stringify_keys' called for <ActionController::TestSession:0x000001060db590> 

我推测,这是因为“会话”对象的ActionController :: TestSession的实例,并在铁轨3.1.0有一堆实例变量,可以'不应该'串化'。

我应该如何正确访问设计用户信息(最好是动态的),以便我可以添加'current_lesson_id'等。

谢谢了,

+0

'会议[ 'current_lesson_id'] = 234234''得到:new'咄,对不起。 – doublea

回答

0

试试这个修复您的错误的Rails 3.1

sign_in user 
    hashy = session['warden.user.user.key'][2] 
    get :action, nil, {"warden.user.user.key"=>["User", [user.id],hashy]}, nil 

为我工作。似乎不喜欢Rails处理TestSessions的新方式。

0

我觉得您做的更好:

def valid_session 
    my_session_values = {:some_key => :some_value} 
    session.to_hash.merge my_session_values 
end