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