2010-11-05 4 views
23

Je peux vérifier si FeedItem :: populate_from_friend_to_user est appelé dans la classe d'utilisateurs?Rspec: comment puis-je vérifier si un appel à une méthode d'une autre classe est appelé?

it "should auto populate feed after user.add_friend" do 
     @user.add_friend(@friend1) 
     @user.should_receive('FeedItem::populate_from_friend_to_user').with(@friend1, @user) 
    end 

Avec le code ci-dessus je reçois:

undefined method `populate_from_friend_to_user' for :FeedItem:Symbol 

Répondre

36

Vous ne devrait pas savoir où la méthode est appelée, juste si la méthode est appelée .. Vous savez si la méthode est appelez:

it "should auto populate feed after user.add_friend" do 
    FeedItem.should_receive(:populate_from_friend_to_user).with(@friend1, @user) 
    @user.add_friend(@friend1) 
end 
+0

wow, merci! recherché longtemps pour trouver cette réponse :) – dimsuz

+13

Ceci est 'Object.should recevoir (: méthode) .with (params)' maintenant –

+4

@ChrisNicola: mon expérience ne supporte pas cela? – Ashe

8

Rappelez-vous que cela ne fonctionne que dans rspec2. Pour rspec3 u appeler

expect(@user).to receive(:your_method)

https://www.relishapp.com/rspec/rspec-mocks/v/3-0/docs/message-expectations

+2

et si ': your_method' est une méthode de classe? –

+0

Ensuite, vous ne prévoyez pas de l'exécuter sur l'objet, je suppose? Je ne suis pas sûr si j'ai eu votre question;] –

+0

Je l'ai compris, je pense. J'ai dû appeler expect_on_any_instance_of (Utilisateur) ... –

Questions connexes