Я хотел бы проверить, действительно ли вызывается действие контроллера без перенаправления в некоторый before_filter. Поскольку само действие контроллера может выполнять перенаправление, я хочу заблокировать действие, чтобы вызвать конкретную ошибку (SuccessfulActionError или аналогичная), а затем проверить эту ошибку как индикатор того, что метод был вызван.
Итак, я добавил следующее:
controller.stub!(:action).and_raise(SuccessfulActionError)
Это работает как-то , исключение вызывается, но фактический код в методе все еще выполняется (например, если я отправляю идентификатор несуществующей записи в действие 'show' , он генерирует исключение ActiveRecord :: RecordNotFound).
Почему это? Я хочу полностью заглушить действие, как если бы оно было реализовано как
def action
raise SuccessfulActionError
end
Что я делаю не так? Это неправильный подход?
EDIT:
Использование
controller.should_receive(:action)
тоже не работает.
Я перезаписываю контроллер в фильтре before_all, как это, чтобы исправить default_url_options, которые не подобраны из ApplicationController:
class MyController
def default_url_options(options = {})
{ :locale => params[:locale] }
end
end
Может ли это быть виновником? Спецификации не работают вообще, когда я удаляю это, к сожалению.