module ActionDispatch::Assertions::ResponseAssertions
A
small suite of assertions that test responses from Quails applications.
Public Instance Methods
Asserts that the redirection options passed in match those of the redirect called in the latest action. This match can be partial, such that assert_redirected_to(controller: "weblog")
will also match the redirection of redirect_to(controller: "weblog", action: "show")
and so on.
# Asserts that the redirection was to the "index" action on the WeblogController assert_redirected_to controller: "weblog", action: "index" # Asserts that the redirection was to the named route login_url assert_redirected_to login_url # Asserts that the redirection was to the URL for @customer assert_redirected_to @customer # Asserts that the redirection matches the regular expression assert_redirected_to %r(\Ahttp://example.org)
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 55 def assert_redirected_to(options = {}, message = nil) assert_response(:redirect, message) return true if options === @response.location redirect_is = normalize_argument_to_redirection(@response.location) redirect_expected = normalize_argument_to_redirection(options) message ||= "Expected response to be a redirect to <#{redirect_expected}> but was a redirect to <#{redirect_is}>" assert_operator redirect_expected, :===, redirect_is, message end
Asserts that the response is one of the following types:
-
:success
- Status code was in the 200-299 range -
:redirect
- Status code was in the 300-399 range -
:missing
- Status code was 404 -
:error
- Status code was in the 500-599 range
You can also pass an explicit status number like assert_response(501)
or its symbolic equivalent assert_response(:not_implemented)
. See Rack::Utils::SYMBOL_TO_STATUS_CODE for a full list.
# Asserts that the response was a redirection assert_response :redirect # Asserts that the response code was status code 401 (unauthorized) assert_response 401
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 30 def assert_response(type, message = nil) message ||= generate_response_message(type) if RESPONSE_PREDICATES.keys.include?(type) assert @response.send(RESPONSE_PREDICATES[type]), message else assert_equal AssertionResponse.new(type).code, @response.response_code, message end end
Private Instance Methods
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 98 def code_with_name(code_or_name) if RESPONSE_PREDICATES.values.include?("#{code_or_name}?".to_sym) code_or_name = RESPONSE_PREDICATES.invert["#{code_or_name}?".to_sym] end AssertionResponse.new(code_or_name).code_and_name end
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 81 def generate_response_message(expected, actual = @response.response_code) "Expected response to be a <#{code_with_name(expected)}>,"\ " but was a <#{code_with_name(actual)}>" .dup.concat(location_if_redirected).concat(response_body_if_short) end
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 92 def location_if_redirected return "" unless @response.redirection? && @response.location.present? location = normalize_argument_to_redirection(@response.location) " redirect to <#{location}>" end
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 72 def normalize_argument_to_redirection(fragment) if Regexp === fragment fragment else handle = @controller || ActionController::Redirecting handle._compute_redirect_to_location(@request, fragment) end end
Proxy to to_param if the object will respond to it.
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 68 def parameterize(value) value.respond_to?(:to_param) ? value.to_param : value end
# File actionpack/lib/action_dispatch/testing/assertions/response.rb, line 87 def response_body_if_short return "" if @response.body.size > 500 "\nResponse body: #{@response.body}" end