Я нахожусь в процессе обновления до Rails 3.1.0 с 3.0.10 и использую Devise для аутентификации.
У меня есть ряд функциональных тестов, которые требуют от меня установки одной переменной сеанса. Вещи в духе:
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>
Я так понимаю, это связано с тем, что объект "session" является экземпляром ActionController::TestSession, а в rails 3.1.0 есть куча переменных экземпляра, которые не могут и не должны быть "строковыми".
Как мне правильно получить доступ к информации о пользователе devise (желательно динамически), чтобы я мог добавить «current_lesson_id» и т. д.?
Большое спасибо,
session['current_lesson_id'] = 234234
get :new
ну извини. - person doublea   schedule 09.09.2011