2011-06-24 1 views
1

J'ai intégré l'application de rails avec omniauth et concevoir l'intégration. Dans un contrôleur je -Rspec pour sauter l'action de concevoir dans le contrôleur - sign_in_and_redirect

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

que cette action est de concevoir, je ne devrais pas tester cette action, mais seulement la présence de celui-ci (me corriger si je me trompe.). De plus, comme je me moque de cet objet personne, il n'a pas de méthodes pour passer l'action sign_in_and_redirect d'origine.

Alors, comment tester ce contrôleur?

MISE À JOUR

J'ai essayé dans mon avant faire bloquer -

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

Mais cela me donne erreur - Missing authentifications templace/créer Je n'ai pas create.html. erb, car il redirige dans le flux de travail normal.


MISE À JOUR

Mes AuthencationController # créer le code de la méthode peut être vu ici - http://www.pastie.org/2116067 Mon code de test peut être vu ici - http://www.pastie.org/2116081

Répondre

4

Enfin, j'ai trouvé qu'il s'agit de concevoir.

Ce résolu les problèmes - concevoir wiki - How To: Controllers and Views tests with Rails 3 (and rspec)

je devais inclure le support/fichier devise.rb et au-dessous des lignes -

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

Après que je viens d'ajouter les méthodes nécessaires à la classe de personne par stubbing il et ça a marché.

2

sign_in_and_redirect vous donne une erreur MissingTemplate parce que la méthode réelle fait une redirection, alors que le talon ne fait pas, alors Rails suppose que vous voulez rendre le modèle.

i ne doit pas être tester cette action, mais seule présence de celui-ci

Vous devriez spécifiera comment create se comporte, pas les méthodes qu'il appelle en interne. Ce n'est pas la même chose que de se moquer de l'interaction avec un autre composant, comme le modèle.

Puisque vous travaillez à rebours (en écrivant le code avant l'exemple), je vous recommande de commencer par un exemple qui ne fait pas de stubbing ou de moquerie du tout et de le faire passer. Ensuite, vous pouvez expérimenter avec des pièces de boutonnage pour obtenir l'isolation du modèle, mais il n'y a aucun avantage à isoler de Devise.

Questions connexes