Rails / RSpec: «добраться» до другого контроллера - PullRequest
15 голосов
/ 04 октября 2011

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

  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: index line.Спецификация выдает ошибку «нет маршрута соответствует controller => application». «Достаточно справедливо», я понял, и попытался маршрутизировать на другой контроллер. Попытки были:как действие под контроллером «application».

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

Ответы [ 2 ]

10 голосов
/ 04 октября 2011

Для проверки такого рода вещей вы захотите использовать анонимные контроллеры в RSpec. У нас есть фантастический пример о них.

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

1 голос
/ 04 апреля 2016

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

@controller = ADifferentController.new
expect(@controller).to receive(:this_other_thing)
get :index # or whatever
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...