On Mon, Aug 22, 2011 at 12:14 AM, ct9a <[email protected]> wrote:
> Hi, guys,
>
> After reading the rspec book (dec 2010 edition), I went on to write
> controller specs for an application I'm porting over from rails 2.3.x
> to rails 3.
>
>
> 1) I ran 'rake routes' and got the following:
>
> parts GET /parts(.:format)
> {:action=>"index", :controller=>"parts"}
> POST /parts(.:format)
> {:action=>"create", :controller=>"parts"}
> new_part GET /parts/new(.:format)
> {:action=>"new", :controller=>"parts"}
> edit_part GET /parts/:id/edit(.:format)
> {:action=>"edit", :controller=>"parts"}
> part GET /parts/:id(.:format)
> {:action=>"show", :controller=>"parts"}
> PUT /parts/:id(.:format)
>
The :id means you need to pass an "id" to the route helper method.
> {:action=>"update", :controller=>"parts"}
> DELETE /parts/:id(.:format)
> {:action=>"destroy", :controller=>"parts"}
>
> 2) I ran 'rake spec:controllers' and got the error below.
>
> Pending:
> PartsController the new part object's updates are saved successfully
> saves updates to a new part
> # Not Yet Implemented
> # ./spec/controllers/parts_controller_spec.rb:59
>
> Failures:
>
> 1) PartsController saves updates to an existing part object
> successfully
> Failure/Error: put :update#, :part => { 'title' => 'Grimspeed' }
> ActionController::RoutingError:
> No route matches {:controller=>"parts", :action=>"update"}
> # ./spec/controllers/parts_controller_spec.rb:55
>
> 3) Here's what the spec reads:
>
> it 'saves updates to an existing part object successfully' do
> Part.should_receive(:update).
> with( 'title' => 'Brake pads' ).
> and_return(part)
> put :update#, :part => { 'title' => 'Brake pads' }
> end
>
So you need to "find" the part first:
part = double('part')
Part.should_receive(:find).with(1).and_return(part)
Part.should_receive(:update).with('title' => 'Brake pads').and_return(part)
put :update, :id => 1, :part => {'title' => 'Brake pads'}
>
>
>
>
> What I do not understand is that
> the :controller=>"parts", :action=>"update" route actually exists
> (when I ran "rake routes") but the tests does not acknowledge the
> existence of the 'update' method in the controller with PUT request.
>
You need to pass in the :id for Rails to recognize the route.
>
>
>
>
>
>
>
>
> _______________________________________________
> 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