2010-11-05 1 views
23

Я могу проверить, вызывается ли FeedItem :: populate_from_friend_to_user внутри пользовательского класса?Rspec: как я могу проверить, вызван ли вызов метода другого класса?

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 

С выше кода я получаю:

undefined method `populate_from_friend_to_user' for :FeedItem:Symbol 

ответ

36

Вы не должны знать, где метод вызывается, только если метод называется .. Вы просто знаете, если метод звоните:

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

вау, спасибо! долго искали этот ответ :) – dimsuz

+13

Это 'Object.should receive (: method) .with (params)' now –

+4

@ChrisNicola: мой опыт не выдерживает этого? – Ashe

8

Помните, что работает только в rspec2. Для rspec3 U Вызов

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

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

+2

what if ': your_method' - метод класса? –

+0

Тогда вы не ожидаете запустить его на объекте, я полагаю? Я не уверен, получил ли я ваш вопрос;] –

+0

Я понял, думаю. Мне пришлось вызвать expect_on_any_instance_of (User) ... –