отправить на другой контроллер в тесте rspec - PullRequest
23 голосов
/ 03 сентября 2011

Как мне публиковать сообщения на контроллере, отличном от того, на который в настоящий момент указывает тестовый скрипт?

Пример: в user_controller_spec.rb

  it "should just post to users" do        
    post :create, @params    # this goes to the users controller
  end

Я хочу сделатьчто-то вроде:

  it "should post to user and people to do some integration testing" do        
    post :create, @params    # this goes to the users controller still
    post 'people', :create, @params   # this goes to the people controller
  end

пс: я не хочу настраивать огурец

Ответы [ 3 ]

28 голосов
/ 03 сентября 2011

Спецификации контроллеров являются оболочками для функциональных тестов Rails, которые не поддерживают несколько запросов или контроллеров. Вам нужна спецификация запроса RSpec (рейки 3) или спецификация интеграции (рейки 2). Это тесты интеграции с Rails, которые поддерживают несколько запросов с несколькими контроллерами (даже с несколькими сессиями), но они работают немного иначе, чем спецификации контроллеров. Вы должны использовать полный путь (поэтому получите new_thing_path), и вы не можете ничего заглушить на контроллере (потому что нет контроллера до того, как вы сделаете запрос).

Подробнее см. http://relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec и http://api.rubyonrails.org/classes/ActionDispatch/IntegrationTest.html.

5 голосов
/ 27 сентября 2014

Есть способ, если вы присваиваете значение @controller перед вызовом метода тестирования. Пример

def setup

  @controller = UserController.New

  do user stuff

  @controller = ThisController.New

  do test intented for this controller
end
2 голосов
/ 29 августа 2018

Основано на другом ответе, но более безопасно.

Сохранить текущий экземпляр контроллера и создать новый с требуемым контроллером. Наконец, замените новый экземпляр контроллера старым сохраненным экземпляром.

def setup
  old_controller = @controller
  @controller = UserController.new

  # do user stuff

  @controller = old_controller
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...