Я использую подписанные куки для поддержки моего пользователя на страницах, в значительной степени реализованный как здесь .
Я использую два метода, sign_in (account) и sign_out, чтобы манипулировать моими куки, создаваяили уничтожить их так, как вы ожидаете ...
module SessionsHelper
def sign_in account
cookies.signed[:auth_account] = {
:expires => 1.week.from_now,
:value => [account.id, account.hash]
}
end
def sign_out
cookies.delete(:auth_account)
end
end
Однако при попытке использовать этот метод или метод проверки подлинности, который соответствует ему в ApplicationController из функциональных тестов, я получаю NoMethodError:
NoMethodError: неопределенный метод, «подписанный» для {}: ActiveSupport :: HashWithIndifferentAccess
Из этого и этого я понимаю, чтоЭто проблема, связанная с тем, как файлы cookie по-разному определяются в тестовом примере, но я не могу заставить работать ни одно из этих решений.Для полноты, пример теста, который завершается неудачей с вышеуказанной ошибкой:
require 'test_helper'
class AccountsControllerTest < ActionController::TestCase
include SessionsHelper
setup do
# We need to fake authentication by manually
# assigning an account to the sign_in process
sign_in accounts(:ia)
@account = accounts(:ia)
end
test "should 403 on index if unauthenticated" do
sign_out
get :index
assert_response :forbidden
end
test "should 200 on index if authenticated" do
get :index
assert_response :success
end
end