By the way, asserting on the response code will only help ensure that you don't get green specs even though you're request fails with a 406 (or something similar). You're getting a 406 because whatever the Accepts header is on that request ('application/json' I'd presume) does not have a responds_to clause that matches it. Not sure about :json vs 'json.'
On 2 May 2011 18:00, Sidu Ponnappa <ckponna...@gmail.com> wrote: > Hi, > > When testing Rails APIs, always assert on response codes and where > relevant, the Location, Content-Type and other headers. We wound up > doing this on every single project and so extracted it into a gem that > you might find useful: https://github.com/c42/rspec-http > > Best, > Sidu. > http://c42.in > http://about.me/ponnappa > > > On 2 May 2011 17:21, Ants Pants <antsmailingl...@gmail.com> wrote: >> Hello all, >> >> My first question, in my controllers, do I need to test respond_to is >> returning the correct data for its mime-type? >> >> In my controller spec I have >> >> it "creates a list of available types for that category" do >> xhr :get, :index_available, :category_id => 1, :format => :json >> assigns[:types].should have(1).record >> end >> >> and in my logs I see (406 Not acceptable....) >> >> Processing TypesController#index_available to json (for 0.0.0.0 at >> 2011-05-02 13:20:01) [GET] >> Parameters: {"category_id"=>"1"} >> Completed in 1ms (View: 0, DB: 0) | 406 Not Acceptable >> [http://test.host/categories/1/types/index_available.json] >> SQL (0.1ms) ROLLBACK >> SQL (0.0ms) BEGIN >> >> But I get a green pass. >> >> If I change :format => :json to 'json', I get a load of errors (which I have >> mentioned before on this list but haven't had time to address the situation) >> >> >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoders/hash.rb:37:in >> `each' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoders/hash.rb:37:in >> `map' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoders/hash.rb:37:in >> `to_json' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in >> `encode' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in >> `__send__' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in >> `encode' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoders/object.rb:4:in >> `to_json' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in >> `encode' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in >> `__send__' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in >> `encode' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoders/enumerable.rb:11:in >> `to_json' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoders/enumerable.rb:11:in >> `map' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoders/enumerable.rb:11:in >> `to_json' >> /home/anthony/Development/websites/ruby/GMFT/trunk/app/controllers/types_controller.rb:30:in >> `index_available' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in >> `call' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in >> `custom' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in >> `call' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in >> `respond' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in >> `each' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in >> `respond' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:107:in >> `respond_to' >> /home/anthony/Development/websites/ruby/GMFT/trunk/app/controllers/types_controller.rb:29:in >> `index_available' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:1333:in >> `send' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:1333:in >> `perform_action_without_filters' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:617:in >> `call_filters' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:610:in >> `perform_action_without_benchmark' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/benchmarking.rb:68:in >> `perform_action_without_rescue' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/core_ext/benchmark.rb:17:in >> `ms' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/activesupport-2.3.11/lib/active_support/core_ext/benchmark.rb:17:in >> `ms' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/benchmarking.rb:68:in >> `perform_action_without_rescue' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/rescue.rb:160:in >> `perform_action_without_flash' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/flash.rb:151:in >> `perform_action' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:532:in >> `send' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:532:in >> `process_without_filters' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:606:in >> `process' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:567:in >> `process_with_test' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:447:in >> `process' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:398:in >> `get' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:453:in >> `__send__' >> /home/anthony/.rvm/gems/ruby-1.8.7-p302@rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:453:in >> `xhr' >> ./spec/controllers/types_controller_spec.rb:34: >> >> So, two pronged question, do I need to test :json (seeing as I'm not testing >> the contents) and can anyone shed any light on my 406 and/or the errors when >> changing the format to 'json' >> >> Many thanks >> >> -ants >> >> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users