Тестирование приложения на Rails с помощью Rspec с использованием вспомогательного метода декларативных авториза - PullRequest
0 голосов
/ 20 ноября 2011

Я пытаюсь протестировать движок рельсов с помощью 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 -%>

1 Ответ

0 голосов
/ 20 ноября 2011

Проблема в том, что у вас нет current_user, это то, что ожидает declarative_authorization.

Попробуйте войти с authlogic:

before(:each) do
    activate_authlogic
    UserSession.create Factory(:admin_user)
end

Это должно сработать.

...