aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2008-01-05 02:19:48 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2008-01-05 02:19:48 +0000
commit3464a7e79c373947ea7d57c543e36f41bd62049e (patch)
tree263bf0024f4334a3276922e3c062cc5c3674e61d
parent5ccc3cf448c5ba41761d1f50a476f6793331511d (diff)
downloadrails-3464a7e79c373947ea7d57c543e36f41bd62049e.tar.gz
rails-3464a7e79c373947ea7d57c543e36f41bd62049e.tar.bz2
rails-3464a7e79c373947ea7d57c543e36f41bd62049e.zip
assert_response failures include the exception message. Closes #10688.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8559 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/assertions/response_assertions.rb6
-rw-r--r--actionpack/test/controller/action_pack_assertions_test.rb18
3 files changed, 25 insertions, 1 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 7ce2fb5c5b..e6fabd27fc 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 42bd7fb3d2..67dd3a5724 100644
--- a/actionpack/lib/action_controller/assertions/response_assertions.rb
+++ b/actionpack/lib/action_controller/assertions/response_assertions.rb
@@ -33,7 +33,11 @@ module ActionController
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 1eb9610d04..b1006f82be 100644
--- a/actionpack/test/controller/action_pack_assertions_test.rb
+++ b/actionpack/test/controller/action_pack_assertions_test.rb
@@ -124,6 +124,15 @@ class ActionPackAssertionsController < ActionController::Base
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 @@ class ActionPackAssertionsControllerTest < Test::Unit::TestCase
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