diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 7ce2fb5c5b5269763e41c05fe51a47753407eae8..e6fabd27fc1a67590434f9e8ecfc11f0497b26d0 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* assert_response failures include the exception message. #10688 [Seth Rasmussen] + * All fragment cache keys are now by default prefixed with the "views/" namespace [DHH] * Moved the caching stores from ActionController::Caching::Fragments::* to ActiveSupport::Cache::*. If you're explicitly referring to a store, like ActionController::Caching::Fragments::MemoryStore, you need to update that reference with ActiveSupport::Cache::MemoryStore [DHH] diff --git a/actionpack/lib/action_controller/assertions/response_assertions.rb b/actionpack/lib/action_controller/assertions/response_assertions.rb index 42bd7fb3d21c96d6b56c28de76dcb5b84742a3b3..67dd3a57241840e2eb6ec3a73c399e336ecfac76 100644 --- a/actionpack/lib/action_controller/assertions/response_assertions.rb +++ b/actionpack/lib/action_controller/assertions/response_assertions.rb @@ -33,7 +33,11 @@ def assert_response(type, message = nil) elsif type.is_a?(Symbol) && @response.response_code == ActionController::StatusCodes::SYMBOL_TO_STATUS_CODE[type] assert_block("") { true } # to count the assertion else - assert_block(build_message(message, "Expected response to be a , but was ", type, @response.response_code)) { false } + if @response.error? + assert_block(build_message(message, "Expected response to be a , but was \n", type, @response.response_code, @response.template.instance_variable_get(:@exception).message)) { false } + else + assert_block(build_message(message, "Expected response to be a , but was ", type, @response.response_code)) { false } + end end end end diff --git a/actionpack/test/controller/action_pack_assertions_test.rb b/actionpack/test/controller/action_pack_assertions_test.rb index 1eb9610d04af8d9e81b7749f55368a4a57eea2d1..b1006f82be5197e8acf9df3adb9a521a6da124b0 100644 --- a/actionpack/test/controller/action_pack_assertions_test.rb +++ b/actionpack/test/controller/action_pack_assertions_test.rb @@ -124,6 +124,15 @@ def full_messages; ['...stuff...']; end def rescue_action(e) raise; end end +# Used to test that assert_response includes the exception message +# in the failure message when an action raises and assert_response +# is expecting something other than an error. +class AssertResponseWithUnexpectedErrorController < ActionController::Base + def index + raise 'FAIL' + end +end + module Admin class InnerModuleController < ActionController::Base def index @@ -465,6 +474,15 @@ def test_assert_valid_failing rescue Test::Unit::AssertionFailedError => e end end + + def test_assert_response_uses_exception_message + @controller = AssertResponseWithUnexpectedErrorController.new + get :index + assert_response :success + flunk 'Expected non-success response' + rescue Test::Unit::AssertionFailedError => e + assert e.message.include?('FAIL') + end end class ActionPackHeaderTest < Test::Unit::TestCase