David Kahn
2011-Mar-17 19:54 UTC
[rspec-users] Testing route with proc --- possible and how?
I have this route (Rails 3) which handles redirecting shortened urls:
# handles the shortened url lookup
match '':hash'' => redirect { |params|
Sharing.get_url_path_by_short_url(params[:hash]) }, :constraints => { :hash
=> /[a-zA-Z0-9]{7}/ }
It works correctly at the ui. However am having trouble getting a spec
working for it. Note that in the UI the user must be logged in to get to the
url, but the traffic first hits the directed route and then app controller
handles if the user is not logged in.
In spec/routing/routing_spec.rb (note that all necessary test data for it to
pass is set up and verified):
describe "Shorter URL redirect" do
it "routes GET ''STU1VWX'' to stations/1" do
{ :get => "/", :hash => "STU1VWX" }.should
route_to(
:controller => "stations",
:action => "show",
:params => {:id => 1} )
end
end
The problem is that I get this error:
Failure/Error: { :get => "/", :hash => "STU1VWX"
}.should route_to(
The recognized options
<{"controller"=>"sessions",
"action"=>"new"}>
did not match <{"controller"=>"stations",
"action"=>"show",
"params"=>{:id=>1}}>, difference:
<{"controller"=>"stations",
"action"=>"show",
"params"=>{:id=>1}}>.
sessions#new is our root url. So I see that by calling :get =>
''/'' the :hash
seems to be ignored. I have confirmed this by changing the root url and seen
the new root path show in the error above.
Note that if I change the test to:
{ :get => "STU1VWX" }.should route_to( ...
or
{ :get => "/STU1VWX" }.should route_to( ...
I get a ''no route matches'' exception
I have a few conjectures as to that is happening:
- The dynamic route is ignored (i.e. the :hash parameter is being
ignored). Calling in debugger
"Rails.application.routes.recognize_path(''STU1VWX'')"
returns a no route
matches exception.
- The way routes is being tested that the proc on the route does not get
run eventhough the route is seen
- I need to handle authentication (this would confuse me a bit as it
would seem that on a routes test we should just be testing the output of the
router.
If anyone can give me some ideas I would appreciate it.
Best,
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/rspec-users/attachments/20110317/724a5bb0/attachment.html>
Apparently Analagous Threads
- Rspec routing_spec failing on nested singular resource
- Status of Rails.application.routes.recognize_path()
- Un-recognised routes that do exist, using namespaces & subdomain checking
- Routes.recognize_path on more complicated Routes
- rs.recognize_path "/home" is not working in script/console
