[rspec-users] [rspec] looking for a simple refresher

Andrew WC Brown omen.king at gmail.com
Fri Aug 17 19:36:00 EDT 2007


That makes a-lot of sense. That 'new' word threw me off.

My create method is slightly more complex and I'm not sure how to spec it.

  def create
    @user = User.find(params[:user_id])
    @ticket = @user.tickets.build(params[:ticket])
    if @ticket.save
      redirect_to tickets_path
    else
      render new_usr_ticket_path(params[:user_id])
    end
  end


Would I need two mock_models?

On 8/17/07, rupert <rupert_apsc at rupespad.com> wrote:
>
> what's in the create method of the controller?? you've only given the
> contents of the new method - and without knowing what you want it to do it's
> hard to know what will work.
> Assuming it's the normal
>
> def create
>  @ticket = Ticket.new(params(:ticket])
>   if @ticket.save
>    ....etc etc
> end
>
> then something like the following should work:
>
> describe TicketsController, "handling POST /tickets" do
>   before do
>     @ticket = mock_model(Ticket, :save => true)
>     Ticket.stub!(:new).and_return(@ticket)
>     @params = {}
>   end
>
>   def do_post
>     post :create, :ticket => @params
>   end
>
>   it "should create a new ticket" do
>     ticket.should_receive(:new).with(@params).and_return(@ticket)
>     do_post
>   end
>
>   it "should assign the ticket for the view" do
>     do_post
>     assigns[:ticket].should equal(@ticket)
>   end
>
>   it "should save the new ticket" do
>     @ticket.should_receive(:save).with().and_return(true)
>     do_post
>   end
> end
>
> On 18 Aug 2007, at 00:11, Andrew WC Brown wrote:
>
> I replaced:
>
> @ticket.should_receive(:new).with(@params).and_return(@ticket)
>
> with
>
> Ticket.should_receive(:new).with(@params).and_return(@ticket)
>
> Similar Error
>
> 1)
> Spec::Mocks::MockExpectationError in 'TicketsController handling POST
> /tickets should create a new ticket'
> Mock 'Class' expected :new with ({}) once, but received it 0 times
> ./spec/controllers/tickets_controller_spec.rb:16:
>
> If I omit @params = {} then I get the error as following
>
> 1)
> Spec::Mocks::MockExpectationError in 'TicketsController handling POST
> /tickets should create a new ticket'
> Mock 'Class' expected :new with (any args) once, but received it 0 times
> ./spec/controllers/tickets_controller_spec.rb:16:
>
> So its not receiving the new method at all even though I clearly called
> it.
> Could it be possible that the issue is with the actual Ticket model
> itself?
>
> On 8/17/07, David Chelimsky <dchelimsky at gmail.com > wrote:
> >
> > On 8/17/07, Andrew WC Brown <omen.king at gmail.com > wrote:
> > > I've been off the rspec for a few months and I'm trying to get back on
> > it.
> > >
> > > 1)
> > >  Spec::Mocks::MockExpectationError in 'TicketsController
> > > handling POST /tickets should create a new ticket'
> > >  Mock 'Ticket_1001' expected :new with ({}) once, but received it 0
> > times
> > >  ./spec/controllers/tickets_controller_spec.rb:16:
> > >  script/spec:4:
> > >
> > > class TicketsController < ApplicationController
> > >
> > >   def new
> > >     Ticket.new
> > >   end
> > >
> > > end
> > >
> > > describe TicketsController, "handling POST /tickets" do
> > >
> > >   before do
> > >     @ticket = mock_model(Ticket, :to_param => '1', :save => true)
> > >     Ticket.stub!(:new).and_return(@ticket)
> > >     @params = {}
> > >   end
> > >
> > >   def do_post
> > >     post :create, :ticket => @params
> > >   end
> > >
> > >   it "should create a new ticket" do
> > >
> > > @ticket.should_receive(:new).with(@params).and_return(@ticket)
> >
> > This is telling the ticket object to expect new, but it's the Ticket
> > class that will receive it:
> >
> > Ticket.should_receive(:new).with(@params).and_return(@ticket)
> >
> > That should do it.
> >
> > >     do_post
> > >   end
> > >
> > > end
> > >
> > > Would someone provide with an explanation what I have to do to make
> > this
> > > spec pass?
> > > Peepcode hasn't released their screen cast on rspecing controllers yet
> > ='(
> > >
> > >
> > >
> > >
> > >
> > > _______________________________________________
> > > 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
> >
>
>
>
> --
> Monsterbox Productions
> putting small businesses on-line
>
> 1319 Victoria Avenue East
> Thunder Bay, Ontario P7C 1C3
> Canada
>
> Andrew WC Brown
> web-developer and owner
> andrew at monsterboxpro.com
> P: 807-626-9009
> F: 807-624-2705_______________________________________________
> 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
>



-- 
Monsterbox Productions
putting small businesses on-line

1319 Victoria Avenue East
Thunder Bay, Ontario P7C 1C3
Canada

Andrew WC Brown
web-developer and owner
andrew at monsterboxpro.com
P: 807-626-9009
F: 807-624-2705
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070817/2dad90e6/attachment.html 


More information about the rspec-users mailing list