Rails/RSpec: "получить" на другой контроллер

У меня есть следующие контроллеры Rails 3/application.rb(которые я пытаюсь написать spec для):

  rescue_from CanCan::AccessDenied do |exception|
    flash[:alert] = t(:access_denied)
    if (current_user) then
      redirect_to root_url
    else
      session[:direct_redirect] = request.url
      redirect_to new_user_session_url
    end
  end

Я хотел бы написать некоторые спецификации, чтобы гарантировать, что функциональность работает. Я поместил тесты в spec/controller/application_controller_spec.rb, и мне нужно написать что-то вроде:

  it "should redirect to the root url" do
    controller.stub(:authorize!) { raise CanCan::AccessDenied }
    get :index
    response.should redirect_to(root_url)
  end

Проблема заключается в том, что get: индексная строка. Спектр отбрасывает ошибку "no route matches controller = > application". "Достаточно справедливо", я понял, и попытался перейти на другой контроллер. Попытки были:

* get :controller => 'purchases', :action => :index
* get purchases_url
* get '/purchases/'

Все, где интерпретируется как действие под контроллером приложения.

Итак, как я могу перенаправить на контроллер в rspec отдельно от того, в котором написана спецификация?

Ответы

Ответ 1

Чтобы проверить, что вы хотите использовать анонимные контроллеры в RSpec. Наслаждайтесь отличным примером здесь.

Обязательно просмотрите и другие части этой документации. Я многому научился, просто просматривая примеры, которые у них есть.

Ответ 2

В вашей спецификации:

@controller = ADifferentController.new
expect(@controller).to receive(:this_other_thing)
get :index # or whatever