2011-03-16 15 views
7

Chcę odkryć z brakiem BDD: dołącz parametry dla metody ActiveRecord :: Base.find. Więc mój pomysł jest mieć w specyfikacji coś takiego:Oczekuj wywołania metody i proxy na oryginalną metodę z RSpec

ActiveRecord::Base.should_receive(:find).once.and_proxy_to_original_method 
parent = SomeClass.find 34 
parent.child.should be_loaded 
parent.other_children.should be_loaded 

Jeśli #child lub #other_children stowarzyszenia nie są chętni załadowany, oczekiwanie powinien zawieść coś jak: „Oczekiwany ActiveRecord :: Base.find powoływać raz, ale został wywołany jeszcze 2 razy z następującymi argumentami: 1. ...; 2. ... "

Czy ktoś wie, czy istnieje jakiś mechanizm dopasowujący, który działa w ten sposób lub jak to zrobić.

Dzięki

+0

Mam ten sam problem. Naprawdę szkoda, że ​​nie było. Przydatne do testowania, jeśli jest prawidłowe? został wywołany na modelu zależnym lub coś, aby zapewnić, że hierarchia jest sprawdzana/zapisywana. –

+0

możliwy duplikat [Czy istnieje mniej uciążliwa alternatywa dla \ "powinien \ _wyrażać \"? Rspec \ n "(http://stackoverflow.com/questions/12159536/is-there-a-less-intrusive-alternative-to-rspecs -może-otrzymać) – lulalala

Odpowiedz

5

myślę miałem ten sam problem here. W twoim konkretnym przypadku zrobiłbym to, co uważam za całkiem czyste.

original_method = ActiveRecord::Base.method(:find) 
ActiveRecord::Base.should_receive(:find).once do (*args) 
    original_method.call(*args) 
end 

wierzę można rozszerzyć klasę rspec Mocks::MessageExpectation zawierać metodę and_proxy_to_original_method, nie powinno być zbyt trudne, ale nie spojrzał.

+0

Hmmm ... Podoba mi się ten pomysł. Sprawdzi to i wróci z wynikiem. Dzięki – BurmajaM

Powiązane problemy