У меня есть check_user_access_control
before_filter в моем ApplicationController, который проверяет зарегистрированные роли пользователя и разрешения, прежде чем он его пропустит. Я пытаюсь написать несколько тестов, и я не могу найти хороший способ сделать это.
Для простых действий индекса я просто делаю:
it "allows access to mod" do
login_as(Factory(:mod)) # this is a spec helper
get :index
response.code.should == "200"
end
и все работает отлично. Для редактирования/показа/создания и других действий, которым требуются некоторые параметры, взаимодействия с базой данных и возможной перенаправленности после их запуска, требуется слишком много других материалов, которые нужно зачистить.
Есть ли способ проверить, было ли вызвано определенное действие после before_filters? Я ищу что-то вроде controller.should_receive(:action_name)
(которое не работает) для замены строки response.code.should == "200"
с.
: rails 3.0.4 и rspec 2.5
Я попробовал другой подход. У нас есть метод в ApplicationController под названием redirect_to_login
, который я сейчас проверяю с помощью controller.should_receive(:redirect_to_login)
и работает.
Пока он правильно распознает, разрешен ли пользователь или нет, он заглушает метод, что означает, что действие контроллера выполняется независимо от того, разрешен ли пользователь. Кроме того, действие зависит от параметров и базы данных, и мы этого не хотим.
Если теперь я закрою метод действия с помощью controller.stub!(:action_name)
, действие не выполняется, но RSpec все еще ищет шаблон. Ну, в некоторых действиях нет шаблонов, они просто заканчиваются на redirect_to :action => :somewhere_else
или render :text => "foobar"
, которые в этот момент нас не волнуют.
В роде мне сейчас нужно найти способ заставить RSpec НЕ беспокоиться о существовании шаблона.