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 at
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 at
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 at
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 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in
`encode''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
`__send__''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
`encode''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in
`encode''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
`__send__''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
`encode''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
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 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in
`call''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in
`custom''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in
`call''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in
`respond''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in
`each''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in
`respond''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:1333:in
`send''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:617:in
`call_filters''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
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 at
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 at
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 at
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 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/flash.rb:151:in
`perform_action''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:532:in
`send''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:606:in
`process''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:447:in
`process''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:398:in
`get''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:453:in
`__send__''
/home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/rspec-users/attachments/20110502/547327e5/attachment-0001.html>
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 <antsmailinglist at 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 at 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 at 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 at 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 at rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in > `encode'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > `__send__'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > `encode'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in > `encode'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > `__send__'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > `encode'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at 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 at 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 at rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in > `call'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in > `custom'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in > `call'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in > `respond'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in > `each'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in > `respond'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:1333:in > `send'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:617:in > `call_filters'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at 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 at 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 at 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 at 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 at 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 at rails2311/gems/actionpack-2.3.11/lib/action_controller/flash.rb:151:in > `perform_action'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:532:in > `send'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:606:in > `process'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:447:in > `process'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:398:in > `get'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:453:in > `__send__'' > /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
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 <ckponnappa at 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 <antsmailinglist at 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 at
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 at
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 at
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 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in
>> `encode''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
>> `__send__''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
>> `encode''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in
>> `encode''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
>> `__send__''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in
>> `encode''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
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 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in
>> `call''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in
>> `custom''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in
>> `call''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in
>> `respond''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in
>> `each''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in
>> `respond''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:1333:in
>> `send''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:617:in
>> `call_filters''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
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 at
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 at
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 at
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 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/flash.rb:151:in
>> `perform_action''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/base.rb:532:in
>> `send''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/filters.rb:606:in
>> `process''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:447:in
>> `process''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:398:in
>> `get''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
rails2311/gems/actionpack-2.3.11/lib/action_controller/test_process.rb:453:in
>> `__send__''
>> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at
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 at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>
On 2 May 2011 14:35, Sidu Ponnappa <ckponnappa at 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 <ckponnappa at 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 <antsmailinglist at 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 at 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 at 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 at 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 at rails2311 > /gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in > >> `encode'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > >> `__send__'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > >> `encode'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311 > /gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:79:in > >> `encode'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > >> `__send__'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/activesupport-2.3.11/lib/active_support/json/encoding.rb:18:in > >> `encode'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at 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 at 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 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in > >> `call'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:135:in > >> `custom'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in > >> `call'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:179:in > >> `respond'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in > >> `each'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/mime_responds.rb:173:in > >> `respond'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/base.rb:1333:in > >> `send'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/filters.rb:617:in > >> `call_filters'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at 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 at 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 at 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 at 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 at 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 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/flash.rb:151:in > >> `perform_action'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/base.rb:532:in > >> `send'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/filters.rb:606:in > >> `process'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/test_process.rb:447:in > >> `process'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/test_process.rb:398:in > >> `get'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at rails2311 > /gems/actionpack-2.3.11/lib/action_controller/test_process.rb:453:in > >> `__send__'' > >> /home/anthony/.rvm/gems/ruby-1.8.7-p302 at 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 at rubyforge.org > >> http://rubyforge.org/mailman/listinfo/rspec-users > >> > > > _______________________________________________ > rspec-users mailing list > rspec-users at 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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20110503/9c39ef71/attachment-0001.html>