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(options = {}, message = nil) ⇒ Object
Asserts that the request was rendered with the appropriate template file or partials.
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
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/action_controller/assertions/response_assertions.rb', line 59 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) if .all? {|(key, value)| @response.redirected_to[key] == value} callstack = caller.dup callstack.slice!(0, 2) ::ActiveSupport::Deprecation.warn("Using assert_redirected_to with partial hash arguments is deprecated. Specify the full set arguments instead", callstack) return true end 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
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/action_controller/assertions/response_assertions.rb', line 24 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(options = {}, message = nil) ⇒ Object
Asserts that the request was rendered with the appropriate template file or partials
Examples
# assert that the "new" view template was rendered
assert_template "new"
# assert that the "new" view template was rendered with Symbol
assert_template :new
# assert that the "_customer" partial was rendered twice
assert_template :partial => '_customer', :count => 2
# assert that no partials were rendered
assert_template :partial => false
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/action_controller/assertions/response_assertions.rb', line 99 def assert_template( = {}, = nil) clean_backtrace do case when NilClass, String, Symbol rendered = @response.rendered[:template].to_s msg = (, "expecting <?> but rendering with <?>", , rendered) assert_block(msg) do if .nil? @response.rendered[:template].blank? else rendered.to_s.match(.to_s) end end when Hash if expected_partial = [:partial] partials = @response.rendered[:partials] if expected_count = [:count] found = partials.detect { |p, _| p.to_s.match(expected_partial) } actual_count = found.nil? ? 0 : found.second msg = (, "expecting ? to be rendered ? time(s) but rendered ? time(s)", expected_partial, expected_count, actual_count) assert(actual_count == expected_count.to_i, msg) else msg = (, "expecting partial <?> but action rendered <?>", [:partial], partials.keys) assert(partials.keys.any? { |p| p.to_s.match(expected_partial) }, msg) end else assert @response.rendered[:partials].empty?, "Expected no partials to be rendered" end else raise ArgumentError end end end |