thats pretty much what I thought, I'll give it a push around and e-mail back
the results
On 8/17/07, rupert <[EMAIL PROTECTED]> wrote:
>
> Not entirely sure how to go about mocking the association, but it's going
> to be something along these lines (totally untested!)....
>
> describe TicketsController, "handling POST /tickets" do
> before do
> @ticket = mock_model(Ticket, :save => true)
>
> @user_tickets_association = mock("accociation")
> @user_tickets_association.stub!(:build).and_return(@ticket)
>
> @user = mock_model(User)
> @user.stub!(:tickets).and_return(@user_tickets_association)
>
> @ticket_params = {}
> end
> def do_post
> post :create, :ticket => @params, :user_id => "user_id"
> end
>
> it "should find the user" do
> User.should_receive(:find).with("user_id").and_return(@user)
> do_post
> end
> it "should assign the user for the view" do
> do_post
> assigns[:user].should equal(@user)
> end
> it "should build a new ticket on the user" do
>
> @user_tickets_association.should_receive(:build).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
>
> it "should save the new ticket" do
> @ticket.should_receive(:save).with().and_return(true)
> do_post
> end
>
> it "should redirect to the ticket path if successful" do
> do_post
> response.should redirect_to('/tickets')
> end
>
> it "should render the new page if create fails" do
> @ticket.stub!(:save).and_return(false)
> do_post
> response.should render_template('new')
> end
> end
>
>
>
> On 18 Aug 2007, at 00:36, Andrew WC Brown wrote:
>
> 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 <[EMAIL PROTECTED]> 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 < [EMAIL PROTECTED] > wrote:
> > >
> > > On 8/17/07, Andrew WC Brown < [EMAIL PROTECTED] > 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
> > > > [email protected]
> > > > http://rubyforge.org/mailman/listinfo/rspec-users
> > > >
> > > _______________________________________________
> > > rspec-users mailing list
> > > [email protected]
> > > 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
> > [EMAIL PROTECTED]
> > P: 807-626-9009
> > F: 807-624-2705_______________________________________________
> > rspec-users mailing list
> > [email protected]
> > http://rubyforge.org/mailman/listinfo/rspec-users
> >
> >
> >
> > _______________________________________________
> > rspec-users mailing list
> > [email protected]
> > 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
> [EMAIL PROTECTED]
> P: 807-626-9009
> F: 807-624-2705_______________________________________________
> rspec-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
>
>
> _______________________________________________
> rspec-users mailing list
> [email protected]
> 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
[EMAIL PROTECTED]
P: 807-626-9009
F: 807-624-2705
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users