rspec_api_documentation icon indicating copy to clipboard operation
rspec_api_documentation copied to clipboard

Get `NoMethodError` when there is an example that expect an api to raise 500 error

Open khiav223577 opened this issue 5 years ago • 5 comments

The example that will cause the problem:

it do
  expect{ subject }.to raise_error(RuntimeError, 'Invalid Buffer')
end

Backtraces

         9: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/mustache-1.1.1/lib/mustache/context.rb:112:in `each'
         8: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/mustache-1.1.1/lib/mustache/context.rb:116:in `block in fetch'
         7: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/mustache-1.1.1/lib/mustache/context.rb:148:in `find'
         6: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/mustache-1.1.1/lib/mustache/context.rb:148:in `call'
         5: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/rspec_api_documentation-6.1.0/lib/rspec_api_documentation/views/api_blueprint_example.
rb:22:in `requests'
         4: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/rspec_api_documentation-6.1.0/lib/rspec_api_documentation/views/markup_example.rb:50:i
n `requests'
         3: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/rspec_api_documentation-6.1.0/lib/rspec_api_documentation/views/markup_example.rb:16:i
n `method_missing'
         2: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/rspec_api_documentation-6.1.0/lib/rspec_api_documentation/example.rb:58:in `requests'
         1: from /home/khiav/.rvm/gems/ruby-2.5.5/gems/rspec_api_documentation-6.1.0/lib/rspec_api_documentation/example.rb:65:in `filter_hea
ders'
/home/khiav/.rvm/gems/ruby-2.5.5/gems/rspec_api_documentation-6.1.0/lib/rspec_api_documentation/example.rb:71:in `remap_headers': undefined m
ethod `each' for nil:NilClass (NoMethodError)

khiav223577 avatar Apr 10 '20 20:04 khiav223577

+1

RaviAsnani avatar May 10 '20 17:05 RaviAsnani

seems like we just need buy-in to write a PR to fix it (and how it should fix it)

bf4 avatar Mar 19 '21 03:03 bf4

@bf4 In general I'm of the opinion that your API endpoints shouldn't knowingly raise, and you should have a catch all for situations you didn't predict, but maybe there's a reason to do this?

jakehow avatar Mar 19 '21 05:03 jakehow

In our case I had an acceptance test that asserted the action wasn't routed

    example "PATCH update" do
      expect {
        do_request
      }.to raise_error(ActionController::RoutingError, /No route matches/)
    end

which I think is reasonable, though I should probably just tag it as document: false in that case, I suppose. Maybe that's the fix? rescue the error and asked if you mean to mark document: false?

bf4 avatar Mar 22 '21 17:03 bf4

@bf4 does your app not rescue this error and provide a response to the client?

jakehow avatar Mar 25 '21 16:03 jakehow