On 2 May 2011 14:35, Sidu Ponnappa <ckponna...@gmail.com> wrote:

> 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
>

I forgot to add my controller as I render the json inline and not in a
template. I wonder if this has a bearing?!

  def index_available
    @types = @category.types.available

    respond_to do |format|
      format.json { render :json => @types.to_json(:only => [:id, :name]) }
      format.html
    end

  end

-ants
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to