2010-11-05 10 views
23

¿Puedo verificar si se llama FeedItem :: populate_from_friend_to_user dentro de la clase de usuario?Rspec: ¿cómo puedo verificar si se llama a una llamada a un método de otra clase?

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 

Con el código anterior me sale:

undefined method `populate_from_friend_to_user' for :FeedItem:Symbol 

Respuesta

36

Usted no debe saber donde se llama al método, al igual si el método se llama .. Usted acaba de saber si el método es llame al:

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, gracias! buscado por mucho tiempo para encontrar esta respuesta :) – dimsuz

+13

Esto es 'Object.should receive (: method) .with (params)' now –

+4

@ChrisNicola: mi experiencia no lo confirma? – Ashe

8

Recuerde que funciona solo en rspec2. Para rspec3 u Llamada

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

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

+2

¿y si ': your_method' es un método de clase? –

+0

Entonces, ¿no espera ejecutarlo en un objeto, supongo? No estoy seguro de si recibí su pregunta;] –

+0

Lo descubrí, creo. Tuve que llamar a expect_on_any_instance_of (User) ... –

Cuestiones relacionadas