J'ai récemment ajouté Devise à ma première application Rails3, et j'ai un peu de mal avec les tests du contrôleur.Test de deux attentes différentes avec moquer
Je suis en train de tester la classe de contrôleur User, qui est le même modèle que Devise. Donc, au début de mon spec j'ai ceci:
before(:each) do
sign_in @user = Factory.create(:user)
end
Maintenant, je peux obtenir le passage de test sans utiliser moqueur ou stubbing comme ceci:
describe "GET edit" do
it "assigns the requested user as @user" do
user = Factory(:user)
get :edit, :id => user.id
assigns(:user).should eql(user)
end
end
Mais à des fins éducatives, je voudrais savoir comment pour le faire fonctionner avec moqueur et talonnage, normalement il serait complètement simple, mais il semble que Devise appelle User.find
avant l'action du contrôleur, et fait échouer le test.
describe "GET edit" do
it "assigns the requested user as @user" do
user = Factory(:user)
User.expects(:find).with(:first, :conditions => {:id => 37}).returns(user)
get :edit, :id => '37'
assigns(:user).should be(user)
end
end
également en ajoutant twice
sur l'attente ce échouerait aussi parce que le premier appel à trouver est différent de celui que je suis la mise en l'attente pour.
Tout aperçu serait apprécié.
Merci beaucoup, je suis arrivé à une conclusion similaire. Y a-t-il un travail pour avoir un '.with 'différent pour différents appels? J'imagine qu'un autre moyen de contourner ce problème serait d'extirper l'enfer de Devise ... – stuartc