Я пытаюсь протестировать движок рельсов с помощью rspec, где я использую гем декларативного_авторизации для управления ролями для моих пользователей. UserSessions управляются Authlogic.
В моем тесте я вызываю вспомогательный метод, который визуализирует представление частично.
В этой части я использую метод декларативной авторизации permitted_to? do ... end
.
Я ожидаю получить ответ в виде строки html.
Проблема в том, что permitted_to?
выдает исключение:
неопределенная локальная переменная или метод current_user для #
Я более подробно изучил декларативные аутентификации модуля AuthorizationInController (для которого требуется authorization.rb, где метод current_user определен как метод класса) и обнаружил, что метод current_user вызывается из options_for_permit, который вызывается из allow_to? 1013 *
Когда я изменяю :user => current_user
в методе options_for_permit на :user => Authorization.current_user
, исключение исчезает, и мой тест проходит.
Я не очень опытный Rubyist, поэтому я не знаю, является ли это правильным способом решения этой проблемы. Метод allow_to? является фундаментальным методом декларативного_авторизации, поэтому я не знаю, почему он работает при обычном его использовании, а не при его использовании здесь в тесте.
мои вопросы:
- Это ошибка в декларативной авторизации?
- Может ли мое исправление повлиять на другие области?
Надеюсь, жду вашего ответа ...
Спасибо
малиновка
EDIT:
Я только что заметил, что мое приложение больше не работает корректно с моими изменениями в среде разработки.
Authorization.current_user теперь является Авторизацией :: AnonymousUser
в то время как current_user является действительным пользователем с ролью администратора ...
Заглушка current_user не работает, это было то, что я попробовал сначала.
Мой тестовый код:
it "should render the main navi for all core modules" do
main_navi = YAML.load_file(File.join(Rails.root, "../..", "config/alchemy", "modules.yml"))
helper.stub(:alchemy_modules).and_return(main_navi)
Authorization.current_user = Factory(:admin_user)
helper.admin_main_navigation.should have_selector('a.main_navi_entry')
end
просмотр кода, который должен быть обработан:
<%- permitted_to?(
:index,
:admin
) do -%>
...
<%- end -%>