web-dev-qa-db-fra.com

Rspec: comment puis-je vérifier si un appel à une méthode d'une autre classe est appelé?

Puis-je vérifier si FeedItem :: populate_from_friend_to_user est appelé dans la classe utilisateur?

    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, j'obtiens:

undefined method `populate_from_friend_to_user' for :FeedItem:Symbol
27
rtacconi

Vous ne devriez pas savoir la méthode est appelée, juste si la méthode est appelée .. Vous savez juste si la méthode est appelée:

Avant RSpec

 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

Dans RSpec la syntaxe est

expect(Object).to receive(:method).with(params)
42
shingara

N'oubliez pas que cela ne fonctionne que dans rspec2. Pour rspec3 u appelez

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

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

9
Adam Piotrowski