Hi, I''m unable to properly test GET calls for my JSON API in Rails 3.1, using ActionController::TestCase. get :loan, ActiveSupport::JSON.encode(minimum_valid_json_params), :format => :json ...where minimum_valid_json_params has the form... {:one_thing=>"something", :another_thing=>23, ... } ...gives me the following unsatisfying error in the test: NoMethodError: undefined method `symbolize_keys'' for #<String:0x6304db> So, my first question is: What setup do I need to properly test a JSON GET request that passes parameters, as above? Next, I''m concerned that if I succeed with TestCase''s get method, I may run into a problem in my controller: is request.body available for a GET request like mine, or is it only for PUT/POST? Thanks, Grar -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Nov 4, 6:10 pm, Grary Stimon <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Hi, > > I''m unable to properly test GET calls for my JSON API in Rails 3.1, > using ActionController::TestCase. > > get :loan, ActiveSupport::JSON.encode(minimum_valid_json_params), > :format => :json > > ...where minimum_valid_json_params has the form... > > {:one_thing=>"something", :another_thing=>23, ... } > > ...gives me the following unsatisfying error in the test: > > NoMethodError: undefined method `symbolize_keys'' for #<String:0x6304db> > > So, my first question is: What setup do I need to properly test a JSON > GET request that passes parameters, as above? >The get method is expecting its second argument to be a hash of parameter name / value pairs, while JSON.encode is returning a string. I''m not certain what you''ll need to change, as I don''t know what format your controller is expecting the parameters in.> Next, I''m concerned that if I succeed with TestCase''s get method, I may > run into a problem in my controller: is request.body available for a GET > request like mine, or is it only for PUT/POST?GET requests do not typically have request bodies - depending on your web server, the body may or may not make it all the way to Rails. More discussion here: http://stackoverflow.com/questions/978061/http-get-with-request-body --Matt Jones -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Matt, Thanks. Continued work on this problem has shifted the emphasis, but I''m still blocked and could use help. I''ve changed the request from a GET to a POST, just to remove uncertainty around the availability of the request.body for processing in the controller. I now have the following error from the controller... JSON::ParserError: unexpected token at ''loan_request=4000000'' ...where the controller code line in question is... data = ActiveSupport::JSON.decode(request.body.read) ...and the ActionController::TestCase test initiation of the error was... request = 4_000_000 post :loan, {:loan_request=>request, :format => :json} ...finally the test log of the request is... Processing by Sec223fAcquisitionController#loan as JSON Parameters: {"loan_request"=>"4000000"} Completed 500 Internal Server Error in 28ms Can someone please offer thoughts, or, perhaps better, an example of the same kind of attempt, successfully made using either Rais TestCase or RSpec? Thanks, Grar -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Hey, Sorry to promote this again, but I''m stuck. Anybody? Grar -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Sun, Nov 6, 2011 at 10:10, Grary Stimon <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Sorry to promote this again, but I''m stuck. Anybody?Those of us who read this via normal email don''t have prior context. Please recap (briefly) what problem you''re trying to get help with. Thanks, Dave -- LOOKING FOR WORK! What: Ruby (on/off Rails), Python, other modern languages. Where: Northern Virginia, Washington DC (near Orange Line), and remote work. See: davearonson.com (main) * codosaur.us (code) * dare2xl.com (excellence). Specialization is for insects. (Heinlein) - Have Pun, Will Babble! (Aronson) -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Dave, Thanks for the consideration you show to this issue of mine, here is the recap... I have the following error from my Rails 3.1 controller... JSON::ParserError: unexpected token at ''loan_request=4000000'' ...where the controller code line in question is... data = ActiveSupport::JSON.decode(request.body.read) ...and the ActionController::TestCase test initiation of the error was... request = 4_000_000 post :loan, {:loan_request=>request, :format => :json} ...finally the test log of the request is... Processing by Sec223fAcquisitionController#loan as JSON Parameters: {"loan_request"=>"4000000"} Completed 500 Internal Server Error in 28ms What bugs me here is that I don''t see the JSON format appear anywhere above. I understand why the parser would choke on ''loan_request=4000000'', because it''s not JSON. Grar -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 6 November 2011 21:35, Grary Stimon <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Dave, > > Thanks for the consideration you show to this issue of mine, here is the > recap... > > I have the following error from my Rails 3.1 controller... > > JSON::ParserError: unexpected token at ''loan_request=4000000'' > > ...where the controller code line in question is... > > data = ActiveSupport::JSON.decode(request.body.read)I can''t say that I fully understand what you are doing here but that does not normally stop me trying to help. If you break here using ruby-debug and inspect request.body.read what do you see? Colin> > ...and the ActionController::TestCase test initiation of the error > was... > > request = 4_000_000 > post :loan, {:loan_request=>request, :format => :json} > > ...finally the test log of the request is... > > Processing by Sec223fAcquisitionController#loan as JSON > Parameters: {"loan_request"=>"4000000"} > Completed 500 Internal Server Error in 28ms > > > What bugs me here is that I don''t see the JSON format appear anywhere > above. I understand why the parser would choke on > ''loan_request=4000000'', because it''s not JSON. > > Grar > > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- gplus.to/clanlaw -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Sun, Nov 6, 2011 at 16:35, Grary Stimon <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> What bugs me here is that I don''t see the JSON format appear anywhere > above. I understand why the parser would choke on > ''loan_request=4000000'', because it''s not JSON.Exactly. You''re telling it to parse the stuff as JSON, but you''re not sending it JSON. Try JSON-encoding the request before you send it. -Dave -- LOOKING FOR WORK! What: Ruby (on/off Rails), Python, other modern languages. Where: Northern Virginia, Washington DC (near Orange Line), and remote work. See: davearonson.com (main) * codosaur.us (code) * dare2xl.com (excellence). Specialization is for insects. (Heinlein) - Have Pun, Will Babble! (Aronson) -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Colin, Here''s some of the debug trace... => 14 data = ActiveSupport::JSON.decode(request.body.read) (rdb:1) p request.body.read "loan=4000000" So, this is consistent with the controller error.. JSON::ParserError: unexpected token at ''loan_request=4000000'' My functional testing approach using... request = 4_000_000 post :loan, {:loan_request=>request, :format => :json} ...is not formulating the request as JSON? So, what, from anyone who tests JSON API''s using functional methods is the proper usage? (I figure I''ll soon have to move on to test with Cucumber, which seems to enjoy more examples around API testing...) Grar -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Sun, Nov 6, 2011 at 17:24, Grary Stimon <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> request = 4_000_000 > post :loan, {:loan_request=>request, :format => :json} > > ...is not formulating the request as JSON?Correct. This is exactly why you''re getting:> (rdb:1) p request.body.read > "loan=4000000"I''m wondering though what happens to the "_request" part. Did you maybe transcribe by hand and drop it? I am not personally familiar with generating JSON from Ruby, but it seems to me that the hash above should generate something like "{ loan_request: 4000000 }". You could try making *that* string the value of loan_request. Or maybe something''s getting confused with the multiple usage of the term "request"? Try renaming loan_request to loan_amount and see what happens. -Dave -- LOOKING FOR WORK! What: Ruby (on/off Rails), Python, other modern languages. Where: Northern Virginia, Washington DC (near Orange Line), and remote work. See: davearonson.com (main) * codosaur.us (code) * dare2xl.com (excellence). Specialization is for insects. (Heinlein) - Have Pun, Will Babble! (Aronson) -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Nov 6, 2011, at 4:35 PM, Grary Stimon wrote:> request = 4_000_000 > post :loan, {:loan_request=>request, :format => :json} > > ...finally the test log of the request is... > > Processing by Sec223fAcquisitionController#loan as JSONThe influence of the :format=>:json bit is ... ^^here^^. If you compare this to other requests, you''ll probably see that they are "as HTML"> Parameters: {"loan_request"=>"4000000"} > Completed 500 Internal Server Error in 28ms > > > What bugs me here is that I don''t see the JSON format appear anywhere > above. I understand why the parser would choke on > ''loan_request=4000000'', because it''s not JSON. > > Grarthe "as JSON" is that the response is desired in JSON format, not that the request parameters are in that format. You can see from the log output that the parameter is what you expect: params[:loan_request] == 4000000 What does the rest of the loan action look like? -Rob Rob Biedenharn Rob-xa9cJyRlE0mWcWVYNo9pwxS2lgjeYSpx@public.gmane.org http://AgileConsultingLLC.com/ rab-/VpnD74mH8+00s0LW7PaslaTQe2KTcn/@public.gmane.org http://GaslightSoftware.com/ -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.