Hi All, New to rspec. Done some Rails, done TDD in other languages, trying to get the two to meet. Getting a syntax error on my first routing spec: context "public routing" do it "routes / to public#landing" do { :get => "/" }.should route_to{:controller => "public", :action => "landing"} end end I run: rspec spec/ I get: /rspec/core/configuration.rb:419:in `load'': /Users/peterbell/Sites/rails/skinnio-web/spec/routing/public_spec.rb:6: syntax error, unexpected tASSOC, expecting ''}'' (SyntaxError) ....should route_to{:controller => "public", :action => "landin... ... ^ /Users/peterbell/Sites/rails/skinnio-web/spec/routing/public_spec.rb:6: syntax error, unexpected '','', expecting ''}'' Looks like it''s expecting just a single argument to route_to, but I see examples all over the place with two arguments. I''m running Rails 3.1rc1 and just updates rspec to 2.6.1 this morning. Any thoughts much appreciated! Best Wishes, Peter
David Chelimsky
2011-May-27 01:02 UTC
[rspec-users] Simple routing spec issue - syntax error
On May 26, 2011, at 11:51 AM, Peter Bell wrote:> Hi All, > > New to rspec. Done some Rails, done TDD in other languages, trying to get the two to meet. Getting a syntax error on my first routing spec: > > context "public routing" do > it "routes / to public#landing" do > { :get => "/" }.should route_to{:controller => "public", :action => "landing"} > end > end > > I run: rspec spec/ > > I get: > /rspec/core/configuration.rb:419:in `load'': /Users/peterbell/Sites/rails/skinnio-web/spec/routing/public_spec.rb:6: syntax error, unexpected tASSOC, expecting ''}'' (SyntaxError) > ....should route_to{:controller => "public", :action => "landin... > ... ^ > /Users/peterbell/Sites/rails/skinnio-web/spec/routing/public_spec.rb:6: syntax error, unexpected '','', expecting ''}'' > > Looks like it''s expecting just a single argument to route_to, but I see examples all over the place with two arguments. I''m running Rails 3.1rc1 and just updates rspec to 2.6.1 this morning. > > Any thoughts much appreciated!This is just a matter of getting accustomed to Ruby syntax. The goal here is to submit a hash as an argument to the route_to method. Here''s the most explicit way to do it: { :get => "/" }.should route_to({:controller => "public", :action => "landing"}) The following will also work, because Ruby will interpret key/value pairs at the end of argument as a hash: { :get => "/" }.should route_to(:controller => "public", :action => "landing") But this won''t: { :get => "/" }.should route_to{:controller => "public", :action => "landing"} The reason is that, in this last form, Ruby thinks you''re passing a block to the route_to method, not a Hash. HTH, David