[rspec-users] Not seeing the failure

David Chelimsky dchelimsky at gmail.com
Wed Jan 23 10:03:25 EST 2008


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
>


More information about the rspec-users mailing list