Ваше обновление действительно помогло мне решить ту же проблему. Если я смогу немного расширить ваше решение в надежде, что это может быть полезно для (возможно, сейчас немногих) людей, обновляющих Rails 3.0 до 3.1 и использующих гемы разработки и декларативной авторизации.
Я использую Test :: Unit, а не RSpec, но я предполагаю, что это может быть легко интегрировано.
Я бы добавил следующее в ActiveSupport :: TestCase (или что бы ни наследовал ваш класс testcase в RSpec). Это гарантирует, что другие пары ключ / значение сеанса также будут переданы в запрос.
class ActiveSupport::TestCase
include Authorization::TestHelper # provides the declarative authorization get_with method
def session_hash(user)
temp_session = session.dup
temp_session.delete("warden.user.user.key")
{"warden.user.user.key"=>["User", [user.id],session['warden.user.user.key'][2]]}.merge(temp_session)
end
end
И в вашем методе запрос get_with затем использует session_hash (user) вместо session. В Test :: Unit ноль в конце не был необходим
def get_action(action,user,*id)
sign_in user
get_with user, action, {:id => id}, session_hash(user)
end
Кажется, что декларативная авторизация не похожа на ActionController :: TestSession из Rails 3.1