I get the unexpected message :user= failure. When you set up the mock with the initial parameters, wouldn't those be stubbing: @coupon.stub!(:user).and_return(@current_user)
While, my spec says that I want :user= to be called? -corey On Jan 23, 2008 10:35 AM, David Chelimsky <[EMAIL PROTECTED]> wrote: > On Jan 23, 2008 9:24 AM, Corey Haines <[EMAIL PROTECTED]> wrote: > > 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. > > Actually - that's what mine did to. These two are the same: > > coupon = mock_model(Coupon, > :user= => nil, > :save => true > ) > > coupon = mock_model Coupon > coupon.stub!(:user=) > coupon.stub!(:save).and_return(true) > > :) > > Looking forward to your blog. > > Cheers, > David > > > 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 <[EMAIL PROTECTED]> wrote: > > > > > > On Jan 23, 2008 8:49 AM, Corey Haines <[EMAIL PROTECTED]> 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 < [EMAIL PROTECTED]> > wrote: > > > > > > > > > > On Jan 23, 2008 8:41 AM, Corey Haines < [EMAIL PROTECTED]> > 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@rubyforge.org > > > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > > > _______________________________________________ > > > > > rspec-users mailing list > > > > > rspec-users@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@rubyforge.org > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > _______________________________________________ > > > rspec-users mailing list > > > rspec-users@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@rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > _______________________________________________ > rspec-users mailing list > rspec-users@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@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users