mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Improve assert_response helper
When the check is failed, print the actual response body if it's not too large. This could improve productivity when writing new tests. Before: ``` ThemeEditorIntegrationTest#test_whatever Expected response to be a <200: ok>, but was a <422: Unprocessable Entity>. Expected: 200 Actual: 422 ``` After: ``` ThemeEditorIntegrationTest#test_whatever Expected response to be a <200: ok>, but was a <422: Unprocessable Entity>. Expected: 200 Actual: 422 Response body: {"errors":["Invalid settings object for section '1'"]} ```
This commit is contained in:
parent
cf5f55cd30
commit
bc3b0e7292
2 changed files with 29 additions and 2 deletions
|
@ -79,7 +79,12 @@ module ActionDispatch
|
||||||
def generate_response_message(expected, actual = @response.response_code)
|
def generate_response_message(expected, actual = @response.response_code)
|
||||||
"Expected response to be a <#{code_with_name(expected)}>,"\
|
"Expected response to be a <#{code_with_name(expected)}>,"\
|
||||||
" but was a <#{code_with_name(actual)}>"
|
" but was a <#{code_with_name(actual)}>"
|
||||||
.concat location_if_redirected
|
.concat(location_if_redirected).concat(response_body_if_short)
|
||||||
|
end
|
||||||
|
|
||||||
|
def response_body_if_short
|
||||||
|
return "" if @response.body.size > 500
|
||||||
|
"\nResponse body: #{@response.body}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def location_if_redirected
|
def location_if_redirected
|
||||||
|
|
|
@ -6,10 +6,11 @@ module ActionDispatch
|
||||||
class ResponseAssertionsTest < ActiveSupport::TestCase
|
class ResponseAssertionsTest < ActiveSupport::TestCase
|
||||||
include ResponseAssertions
|
include ResponseAssertions
|
||||||
|
|
||||||
FakeResponse = Struct.new(:response_code, :location) do
|
FakeResponse = Struct.new(:response_code, :location, :body) do
|
||||||
def initialize(*)
|
def initialize(*)
|
||||||
super
|
super
|
||||||
self.location ||= "http://test.example.com/posts"
|
self.location ||= "http://test.example.com/posts"
|
||||||
|
self.body ||= ""
|
||||||
end
|
end
|
||||||
|
|
||||||
[:successful, :not_found, :redirection, :server_error].each do |sym|
|
[:successful, :not_found, :redirection, :server_error].each do |sym|
|
||||||
|
@ -112,6 +113,27 @@ module ActionDispatch
|
||||||
" redirect to <http://test.host/posts/redirect/2>"
|
" redirect to <http://test.host/posts/redirect/2>"
|
||||||
assert_match expected, error.message
|
assert_match expected, error.message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_error_message_shows_short_response_body
|
||||||
|
@response = ActionDispatch::Response.new
|
||||||
|
@response.status = 400
|
||||||
|
@response.body = "not too long"
|
||||||
|
error = assert_raises(Minitest::Assertion) { assert_response 200 }
|
||||||
|
expected = "Expected response to be a <200: OK>,"\
|
||||||
|
" but was a <400: Bad Request>" \
|
||||||
|
"\nResponse body: not too long"
|
||||||
|
assert_match expected, error.message
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_error_message_does_not_show_long_response_body
|
||||||
|
@response = ActionDispatch::Response.new
|
||||||
|
@response.status = 400
|
||||||
|
@response.body = "not too long" * 50
|
||||||
|
error = assert_raises(Minitest::Assertion) { assert_response 200 }
|
||||||
|
expected = "Expected response to be a <200: OK>,"\
|
||||||
|
" but was a <400: Bad Request>"
|
||||||
|
assert_match expected, error.message
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue