When trying to test out some legacy routes I got a really obtuse error from rake while running the following test case
test "legacy routing OK" do
assert_recognizes {:controller => 'index', :action => 'contact'}, '/contact.html'
end
All I was trying to do was make sure that any URLs saved in search engines from the old static site still worked in the new Rails based site, so no issue, just use assert\_recognizes
and that will make sure the routes are protected by test cases. It is not possible to use assert\_routing
since I did not want the new code to generate the .html style URLs. Anyway, this is what rake complained about
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:147:in
`load_without_new_constant_marking':
./test/functional/index_controller_test.rb:25:
syntax error, unexpected tASSOC, expecting '}'
(SyntaxError)
assert_recognizes {:controller => 'index', :action => 'contact'}, '/contact.html'
./test/functional/index_controller_test.rb:25: syntax error, unexpected ',', expecting '}'
assert_recognizes {:controller => 'index', :action => 'contact'}, '/contact.html'
It turns out that although the code documentation uses the normal rails convention of omitting the ()
around the method arguments, you cannot do that if the first parameter to a method is a hash. So the fix is to put in the parenthesis and the test runs as expected.
test "legacy routing OK" do
assert_recognizes( {:controller => 'index', :action => 'contact'}, '/contact.html' )
end