Module: ActionController::Assertions::ResponseAssertions
- Defined in:
- lib/action_controller/assertions/response_assertions.rb
Overview
A small suite of assertions that test responses from Rails applications.
Instance Method Summary collapse
-
#assert_redirected_to(options = {}, message = nil) ⇒ Object
Assert that the redirection options passed in match those of the redirect called in the latest action.
-
#assert_response(type, message = nil) ⇒ Object
Asserts that the response is one of the following types:.
-
#assert_template(expected = nil, message = nil) ⇒ Object
Asserts that the request was rendered with the appropriate template file.
Instance Method Details
#assert_redirected_to(options = {}, message = nil) ⇒ Object
Assert 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.
Examples
# assert that the redirection was to the "index" action on the WeblogController
assert_redirected_to :controller => "weblog", :action => "index"
# assert that the redirection was to the named route login_url
assert_redirected_to login_url
# assert that the redirection was to the url for @customer
assert_redirected_to @customer
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/action_controller/assertions/response_assertions.rb', line 62 def assert_redirected_to( = {}, =nil) clean_backtrace do assert_response(:redirect, ) return true if == @response.redirected_to # Support partial arguments for hash redirections if .is_a?(Hash) && @response.redirected_to.is_a?(Hash) return true if .all? {|(key, value)| @response.redirected_to[key] == value} end redirected_to_after_normalisation = normalize_argument_to_redirection(@response.redirected_to) = normalize_argument_to_redirection() if redirected_to_after_normalisation != flunk "Expected response to be a redirect to <#{}> but was a redirect to <#{redirected_to_after_normalisation}>" end end end |
#assert_response(type, message = nil) ⇒ Object
Asserts that the response is one of the following types:
-
:success
- Status code was 200 -
: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 ActionController::StatusCodes for a full list.
Examples
# assert that the response was a redirection
assert_response :redirect
# assert that the response code was status code 401 (unauthorized)
assert_response 401
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/action_controller/assertions/response_assertions.rb', line 27 def assert_response(type, = nil) clean_backtrace do if [ :success, :missing, :redirect, :error ].include?(type) && @response.send("#{type}?") assert_block("") { true } # to count the assertion elsif type.is_a?(Fixnum) && @response.response_code == type assert_block("") { true } # to count the assertion elsif type.is_a?(Symbol) && @response.response_code == ActionController::StatusCodes::SYMBOL_TO_STATUS_CODE[type] assert_block("") { true } # to count the assertion else if @response.error? exception = @response.template.instance_variable_get(:@exception) = exception && exception. assert_block((, "Expected response to be a <?>, but was <?>\n<?>", type, @response.response_code, .to_s)) { false } else assert_block((, "Expected response to be a <?>, but was <?>", type, @response.response_code)) { false } end end end end |
#assert_template(expected = nil, message = nil) ⇒ Object
Asserts that the request was rendered with the appropriate template file.
Examples
# assert that the "new" view template was rendered
assert_template "new"
88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/action_controller/assertions/response_assertions.rb', line 88 def assert_template(expected = nil, =nil) clean_backtrace do rendered = @response.rendered_template.to_s msg = (, "expecting <?> but rendering with <?>", expected, rendered) assert_block(msg) do if expected.nil? @response.rendered_template.blank? else rendered.to_s.match(expected) end end end end |