class A def process @b.calculate end end it ''should change b calculate value'' do @b.should_receive(:calculate) @a.process @b.calculae_value.should == ''after_calculae'' end it will fail, if I comment out #@b.should_receive(:calculate), the test pass, or if comment out #@b.calculae_value.should == ''after_calculae'', also pass. so my colleague said maybe should_receive break the mehod chain and return. thing is really going this way? -- Posted via http://www.ruby-forum.com/.
David Chelimsky
2010-Jul-29 13:31 UTC
[rspec-users] should_receive break the method chain?
On Jul 29, 2010, at 7:46 AM, Zhenning Guan wrote:> class A > def process > @b.calculate > end > end > > > it ''should change b calculate value'' do > @b.should_receive(:calculate) > @a.process > > @b.calculae_value.should == ''after_calculae'' > end > > it will fail, if I comment out #@b.should_receive(:calculate), the test > pass, > or if comment out #@b.calculae_value.should == ''after_calculae'', also > pass. > > so my colleague said maybe should_receive break the mehod chain and > return. > thing is really going this way?Your colleague is correct. Any time you use object.stub(:method) or object.should_receive(:method) on a real object, the method is replaced by the mock framework. This is true with all of the popular ruby mock/test double frameworks. The one way to get around that is to use RR''s[1] proxy. HTH, David [1] http://github.com/btakita/rr