# Check the default route (i.e., the index action)
assert_recognizes {:controller => 'items', :action => 'index'}, 'items'
My test file test/functionals/birds_controller_test.rb
require ‘test_helper’
class BirdsControllerTest < ActionController::TestCase
test “should have some restful routes” do
assert_recognizes {:controller => ‘birds’, :action => “index”}, “birds”
As Sijo pointed out, calls to assert_recognizes should have
parentheses around the method parameters when the first parameter is a
hash. The error you're seeing is a syntax error in Ruby. The code
never gets executed because the Ruby parser barfs. The API docs are a
misleading in this case; assert_recognizes won't work with parentheses
omitted and a hash as the first parameter. Actually, as I poke around
through the routing_assertions.rb file, I see several examples of
omitted parentheses in the docs that may not work exactly as written.
The conventional Ruby wisdom, as far as I can tell is to omit
parentheses for single method calls that are command-like, such as
puts. also.omit.parentheses.when.method.chaining.
Ruby allows parentheses to be omitted whenever possible, but has some
internal parsing rules that check for ambiguity. I haven't run across
a really clear and detailed explanation of these rules, but here's an
example:
def my_method(arg)
puts 'hello' # => non-ambiguous, no parentheses needed
end
my_method {:a => 'foo', :b => 'bar'} # => ambiguous. Is this a block
or a hash?