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

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

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.

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

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

etc etc