diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 70b62e9d..e9e6609e 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -725,7 +725,6 @@ module Sinatra @env['sinatra.error'] = boom dump_errors!(boom) if settings.dump_errors? - raise boom if settings.show_exceptions? @response.status = 500 if res = error_block!(boom.class) @@ -750,6 +749,7 @@ module Sinatra end end end + raise boom if settings.show_exceptions? and keys == Exception nil end diff --git a/test/settings_test.rb b/test/settings_test.rb index 821376c2..1a33492b 100644 --- a/test/settings_test.rb +++ b/test/settings_test.rb @@ -202,6 +202,29 @@ class SettingsTest < Test::Unit::TestCase assert body.include?("StandardError") assert body.include?("show_exceptions setting") end + + it 'does not override app-specified error handling' do + klass = Sinatra.new(Sinatra::Application) + mock_app(klass) { + enable :show_exceptions + + error RuntimeError do + 'Big mistake !' + end + + get '/' do + raise RuntimeError + end + } + + get '/' + assert_equal 500, status + + assert ! body.include?("") + assert body.include? "Big mistake !" + + end + end describe 'dump_errors' do