Rspec пропустить разработку действия в контроллере - sign_in_and_redirect - PullRequest
1 голос
/ 24 июня 2011

Я интегрировал приложение rails с поддержкой omniauth и devise.В одном контроллере, который у меня есть -

def create
     # some 
     # stuff 
     # here
   sign_in_and_redirect(:person, @person)
     # some 
     # stuff 
     # here
 end 

, поскольку это действие разработано, я должен проверять не это действие, а только его наличие (поправьте меня здесь, если я ошибаюсь).Кроме того, поскольку я осмеиваю этот объект person, у него нет методов для передачи действия origin_in_and_redirect.

Итак, как можно протестировать этот контроллер?

UPDATE

Я пробовал это в своем блоке before do -

controller.stub!(:sign_in_and_redirect).and_return(true)

Но это выдает мне ошибку, так как - Отсутствует аутентификация templace / create У меня нет create.html.erb, так как он перенаправляетв обычном рабочем процессе.


ОБНОВЛЕНИЕ

Мой код метода создания AuthencationController # можно посмотреть здесь - http://www.pastie.org/2116067 Мой тестовый код можно увидеть здесь- http://www.pastie.org/2116081

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

Наконец я обнаружил, что это связано с devise.

Это решило проблемы - devise wiki - Как: Тесты контроллеров и представлений с Rails 3 (и rspec)

Мне пришлось включить файл support / devise.rb и строки ниже -

RSpec.configure do |config|
   config.include Devise::TestHelpers, :type => :controller
end

После этого я просто добавил необходимые методы в класс person, оформив его, и это сработало.

2 голосов
/ 24 июня 2011

sign_in_and_redirect выдает ошибку MissingTemplate, поскольку реальный метод выполняет перенаправление, а заглушка - нет, поэтому Rails предполагает, что вы хотите отрендерить шаблон.

я не должентестировать это действие, но только его наличие

Вы должны указать, как ведет себя create, а не какие методы он вызывает внутри.Это не то же самое, что издеваться над взаимодействием с другим компонентом, например с моделью.

Поскольку вы работаете в обратном направлении (пишете код перед примером), я бы рекомендовал начать с примера, в котором нет заглушки илииздеваться над всем и заставить его пройти.Затем вы можете поэкспериментировать с заглушкой, чтобы получить изоляцию от модели, но нет никакой выгоды в изоляции от Devise.

...