提交 c6fe614e 编写于 作者: J Jon Atack

Show redirect response code in assert_response messages

Follow-up to PR #19977, which helpfully added the redirection path to the error message of assert_response if response is a redirection, but which removed the response code, obscuring the type of redirect.

This PR:

- brings back the response code in the error message,

- updates the tests so the new messages can be tested,

- and adds test cases for the change.
上级 c2e70ca9
......@@ -85,17 +85,15 @@ def normalize_argument_to_redirection(fragment)
end
end
def generate_response_message(type)
message = "Expected response to be a <#{type}>, but was"
if @response.redirection?
redirect_is = normalize_argument_to_redirection(@response.location)
message << " a redirect to <#{redirect_is}>"
else
message << " <#{@response.response_code}>"
end
def generate_response_message(type, code = @response.response_code)
"Expected response to be a <#{type}>, but was a <#{code}>"
.concat location_if_redirected
end
message
def location_if_redirected
return '' unless @response.redirection? && @response.location.present?
location = normalize_argument_to_redirection(@response.location)
" redirect to <#{location}>"
end
end
end
......
......@@ -64,14 +64,35 @@ def test_assert_response_sym_typo
}
end
def test_message_when_response_is_redirect_but_asserted_for_status_other_than_redirect
@response = FakeResponse.new :redirection, "http://test.host/posts/redirect/1"
error = assert_raises(Minitest::Assertion) do
assert_response :success
end
def test_error_message_shows_404_when_404_asserted_for_success
@response = ActionDispatch::Response.new
@response.status = 404
error = assert_raises(Minitest::Assertion) { assert_response :success }
expected = "Expected response to be a <success>, but was a <404>"
assert_match expected, error.message
end
def test_error_message_shows_302_redirect_when_302_asserted_for_success
@response = ActionDispatch::Response.new
@response.status = 302
@response.location = 'http://test.host/posts/redirect/1'
error = assert_raises(Minitest::Assertion) { assert_response :success }
expected = "Expected response to be a <success>, but was a <302>" \
" redirect to <http://test.host/posts/redirect/1>"
assert_match expected, error.message
end
def test_error_message_shows_302_redirect_when_302_asserted_for_301
@response = ActionDispatch::Response.new
@response.status = 302
@response.location = 'http://test.host/posts/redirect/2'
expected = "Expected response to be a <success>, but was a redirect to <http://test.host/posts/redirect/1>"
assert_equal expected, error.message
error = assert_raises(Minitest::Assertion) { assert_response 301 }
expected = "Expected response to be a <301>, but was a <302>" \
" redirect to <http://test.host/posts/redirect/2>"
assert_match expected, error.message
end
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册