On 9/3/07, Rodrigo Alvarez Fernández <[EMAIL PROTECTED]> wrote:
> On 9/3/07, Peter Marklund <[EMAIL PROTECTED]> wrote:
> > > 2) Chained stubs/expectations
> > >
> > > mock.stub!(:valid?).and_return(false)
> > > mock.stub!(:valid?).and_return(true).after_receiving
> > > (:save).and_return(true)
> >
> > On first look, that last line is pretty hard to read. I think I
> > understand the intention now, but I'm not sure it harmonizes with the
> > "Clarity over Cleverness" motto.
> >
> I understand that there are maybe too many method calls there, but it
> would be a nice feature.
>
> Another approach could be using blocks:
>
> mock.stub?(:save).and_return(true) do |saved_mock|
>   saved_mock.stub!(:valid?).and_return(true)
> end
>
> WDYT?

This seems kind of funky.  If an AR object can be saved then it's
going to be valid anyway.  In other words

my_object.valid?  #  false
my_object.save    #  true
my_object.valid?  #  true

is a super weird sequence.  What context is this in?

At first glance (i.e. with no context) I don't think that's a good use
for mocks.  You're introducing behavior and state into the mock ("when
save is called, change my valid state to true") which is getting a bit
clever and mixing concerns imo.  The mocks created via the framework
should be pretty stupid and just respond how you want them to.  If you
do need some actual behavior then I suggest you code up another object
that behaves as you need.

However as I said that's just a strange sequence anyway, which
suggests that maybe your design is a bit off.

Pat
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to