Rspec and restful routes

Hi all,

I’m trying to test that my users show page renders. The resource has
the route /users/:id

How would I code that for an Rspec test? So far I’ve tried these four
ways:

it “should have a users show path” do
get user_path(:action => ‘show’)
end

it “should have a users show path” do
get user_show_path
end

it “should have a users show path” do
get user_path(:id => ‘1’)
end

it “should have a users show path” do
get ‘/users/1’
end

But I keep getting a RoutingError from Rspec even though it renders ok
when I just go to the page. So how would I spec it? Thanks

On Mon, Feb 6, 2012 at 12:16 AM, edward michaels [email protected]
wrote:

end

it “should have a users show path” do
get user_show_path
end

it “should have a users show path” do
get user_path(:id => ‘1’)
end

This variant worked on my side:

…/spec/requests$ vim orders_spec.rb
describe “Orders” do

describe “GET /order/id” do
it “routes to a show order” do
get order_path(:id => “abc123”)
response.status.should be(200)
end
end

Passes when that order is in the test db and fails with
ActiveRecord::RecordNotFound when I change
the id to a non-present value, so that seems correct.
I have the record in the test db at the time of executing
this test.

But I keep getting a RoutingError from Rspec even though it renders ok

when I just go to the page. So how would I spec it? Thanks

Maybe just try to log the result of

user_path(:id => ‘1’)
user_path(:id => 1)

in your controller, to see what it gives there?

In the controller under test I added:

Rails.logger.debug order_path(:id => ‘adsfadf1’)

and this yields in the log:

/orders/adsfadf1

Do the standard request tests that are built by rspec-rails
in the spec/requests/ directory upon rails g scaffold function
correctly?

HTH,

Peter

Thanks, you don’t declare the restful routes in your controller
though, right? The error that I’m getting specifies that there is no
‘show’ action like this:

   ActionController::RoutingError:
   No route matches {:controller=>"users", :action=>"users/1"}

So it’s looking for a ‘users/1’ action but of course it’s not going to
find it in the controller.

use that looks incorrect the restful actions are actions like
show
index
create

etc etc

On Tue, Feb 7, 2012 at 3:07 PM, edward michaels [email protected]
wrote:

Thanks, you don’t declare the restful routes in your controller
though, right?

In the case I showed, I do declare the default RESTful
routes in the config/routes.rb (they are set there by the
rails generator):

$ cat config/routes.rb
ApplicationName::Application.routes.draw do

resources :orders

end

The error that I’m getting specifies that there is no

‘show’ action like this:

  ActionController::RoutingError:
  No route matches {:controller=>"users", :action=>"users/1"}

So it’s looking for a ‘users/1’ action but of course it’s not going to
find it in the controller.

Did you try rake routes to inspect the details ?

$ rake routes | grep order | grep show
order GET /orders/:id(.:format)
orders#show

HTH,

Peter