[rspec-users] Not seeing the failure

Corey Haines coreyhaines at gmail.com
Wed Jan 23 10:24:47 EST 2008


Thanks, David!

Here's what I morphed the specs into:

http://pastie.caboo.se/142411

And, I ended up with a blog entry that I'll write tonight.

Basically, here's the situation I've been running into which is causing my
specs to grow.

If I don't set up something to tell the coupon that it is going to have
:user= called on it, then the other tests fails. I didn't want to stub it,
as I want this to be part of my expectations. Luckily, it only took a minute
to come up with a possible solution, again relying on the fact that things
tend to work how I think they should.

The solution I thought of was to set the stub! call in the before(:each),
then set an actual expectation in the spec. In  my mind, the expectation
should override the stub (making sure it gets called), but the stub will
allow the other tests to pass. Fantastic! It works. I'm going to write up a
blog entry on this pattern, and I'll send a link when I post it.

Thanks for your help.
-Corey



On Jan 23, 2008 10:03 AM, David Chelimsky <dchelimsky at gmail.com> wrote:

> On Jan 23, 2008 8:49 AM, Corey Haines <coreyhaines at gmail.com> wrote:
> > Of course. Thanks, David! I still am getting used to user=, rather than
> just
> > user. Thanks again.
>
> No problem. I certainly got caught by that early on.
>
> I have some more general comments. See below:
>
> >
> > -Corey
> >
> >
> >
> > On Jan 23, 2008 9:46 AM, David Chelimsky < dchelimsky at gmail.com> wrote:
> > >
> > > On Jan 23, 2008 8:41 AM, Corey Haines < coreyhaines at gmail.com> wrote:
> > >
> > >
> > >
> > > > All,
> > > >
> > > > I'm missing something simple, I think. I am writing a spec to say
> that
> > my
> > > > CouponController should create a new coupon from the form
> parameters,
> > then
> > > > set the current user. Here's the spec:
> > > >
> > > > describe CouponController, "When posting to save_coupon" do
> > > >
> > > >   before(:each) do
> > > >     @expectedName = "pepper's"
> > > >     @expectedAmount = 5
> > > >
> > > >     coupon = mock_model Coupon
> > > >     current_user = mock_model User
> > > >     controller.stub! (:current_user).and_return(current_user)
> > > >
> > > >
> > Coupon.should_receive
> (:new).with({"name"=>@expectedName,"amount"=>@expectedAmount}).and_return(coupon)
> > > >     coupon.should_receive(:user).with(current_user)
> > > >     coupon.should_receive(:save)
> > > >   end
> > > >
> > > >   it "should tell the Coupon model to create a new coupon with the
> given
> > > > parameters and save" do
> > > >     post
> > > >
> 'save_coupon',{:coupon=>{:name=>@expectedName,:amount=>@expectedAmount}}
> > > >   end
> > > >
> > > > Here's the controller method:
> > > >
> > > >   def save_coupon
> > > >     coupon = Coupon.new(params[:coupon])
> > > >     coupon.user = current_user
> > > >     coupon.save
> > > >     redirect_to_index "Coupon Added!"
> > > >   end
>
> This one example is doing too much IMO. You even say "I am writing a
> spec to say that my CouponController should create a new coupon from
> the form parameters, then set the current user." That's two things.
>
> Generally I try to keep stubs in before(:each), expectations in the
> examples, and one example for each concept that I'm describing.
>
> I took the liberty of pastie-ing what I'd probably do. I haven't run
> it, so it might not work as/is, but you'll get the idea.
>
> http://pastie.caboo.se/142403
>
> Cheers,
> David
>
> PS - I'm really glad to see you getting involved with this list.
>
>
> > > >
> > > > And, I get the following failure:
> > > >
> > > > Mock 'Coupon_1008' received unexpected message :user= with
> > (#<User:0x221a3e8
> > > > @name="User_1009">)
> > >
> > >
> > > That's from this line in save_coupon:
> > >
> > > coupon.user = current_user
> > >
> > > Just need to stub that:
> > >
> > > coupon.stub!(:user=)
> > >
> > > Or you could expect it:
> > >
> > >
> > > coupon.should_receive (:user=).with(current_user)
> > >
> > > Cheers,
> > > David
> > >
> > >
> > > >
> > > > I'm sure that I'm missing something very simple, but I've been
> staring
> > at it
> > > > for too long.
> > > >
> > > > (also, if anyone has commented on my style, please feel free to
> mention
> > it,
> > > > as I'm still adjusting my mind to rspec)
> > > >
> > > > Oh, versions, I almost forgot:
> > > > rails 2.0.2
> > > > rspec(_on_rails) plugins just updated from current a couple days
> ago,
> > not
> > > > totally sure how to get the versions of the plugins
> > > >
> > > >
> > > > Thanks.
> > > > -Corey
> > > >
> > > > --
> > > > http://www.coreyhaines.com
> > > > The Internet's Premiere source of information about Corey Haines
> > > > _______________________________________________
> > > > rspec-users mailing list
> > > > rspec-users at rubyforge.org
> > > > http://rubyforge.org/mailman/listinfo/rspec-users
> > > >
> > > _______________________________________________
> > > rspec-users mailing list
> > > rspec-users at rubyforge.org
> > > http://rubyforge.org/mailman/listinfo/rspec-users
> > >
> >
> >
> >
> > --
> >
> >
> > http://www.coreyhaines.com
> > The Internet's Premiere source of information about Corey Haines
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> >
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>



-- 
http://www.coreyhaines.com
The Internet's Premiere source of information about Corey Haines
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20080123/79fdbc49/attachment-0001.html 


More information about the rspec-users mailing list