2011-09-19 11 views
5

Mam dwa modele, Foo i Bar. Foo ma metodę o nazwie ask_bar_to_do_something, która jest wywoływana po zapisaniu instancji Foo. Ta metoda nie zmienia stanu tej instancji Foo.Jak sprawdzić, czy metoda jest wywoływana na obiekcie - Rails RSpec

Zastanawiam się nad tym, aby ta metoda zwróciła 1, i utworzy blok lambda, który utworzy obiekt Foo i sprawdzi wartość zwracaną. Czy jest lepszy sposób to zrobić?

Dziękuję.

Odpowiedz

13

Dlaczego nie kpić z obiektu i oczekiwać wywołania metody?

class Foo < ActiveRecord::Base 
    after_create :ask_bar_to_do_something 

    def ask_bar_to_do_something 
    #blah blah blah 
    end 
end 

Jeśli używasz fabryki, aby utworzyć obiekt

Foo.any_instance.should_receive(:ask_bar_to_do_something) 
Factory(:foo) 

Else

foo = Foo.new(:attr1 => 'value1', :attr2 => 'value2') 
foo.should_receive(:ask_bar_to_do_something) 
foo.save 
+0

dzięki dużo Dexter. Właśnie tego szukam. – AdamNYC

+0

Czy to jest składnia 'should'? Czy ktokolwiek może udostępnić składnię "oczekiwać", jeśli jest ona dostępna? – ianstarz

+3

@ianstarz 'expect_any_instance_of (Foo) .to receive (: ask_bar_do_do_something)' – rxgx

Powiązane problemy