[rspec-users] Route is valid but not found :(

ct9a anexiole at gmail.com
Mon Aug 22 02:14:36 EDT 2011

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)
{:action=>"update", :controller=>"parts"}
          DELETE /parts/:id(.:format)
{:action=>"destroy", :controller=>"parts"}

2) I ran 'rake spec:controllers' and got the error below.

  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


  1) PartsController saves updates to an existing part object
     Failure/Error: put :update#, :part => { 'title' => 'Grimspeed' }
       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
            with( 'title' => 'Brake pads' ).
        put :update#, :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.

More information about the rspec-users mailing list