Rails now allows specifying the HTTP status code in assert_redirected_to
source link: https://blog.saeloun.com/2022/11/08/assert-redirected-to-http-status-code
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Rails provides a plethora of assertion methods to test the request/response flow in applications.
One of the most commonly used assertion methods is assert_redirected_to
which is used to assert that the request was redirected to the specified path.
Before
Let’s create a controller and some actions to test this assertion method.
class HomeController < ApplicationController
def index
end
def go_back
redirect_to root_path, status: :moved_permanently
end
end
When users visit the go_back
action, they are redirected to the root_path
with a :moved_permanently
status code (can be a HTTP response code as well).
Let’s write a test to assert that the request was redirected to the root_path
.
class HomeControllerTest < ActionDispatch::IntegrationTest
test "should redirect to root path" do
get go_back_path
assert_redirected_to root_path
end
end
However, if we are unable to assert the status code, we can’t be sure that the request was redirected with the correct status code.
After
Thanks to this PR the assertion statement can now be used to assert status codes and the corresponding symbols (as shown below).
class HomeControllerTest < ActionDispatch::IntegrationTest
test "should redirect to root path with status code" do
get go_back_path
assert_redirected_to root_path, status: :moved_permanently
# equivalent to
# assert_redirected_to root_path, status: 301
end
end
Response Class | HTTP Status Code | Symbol |
---|---|---|
Informational | 100 | :continue |
101 | :switching_protocols | |
102 | :processing | |
Success | 200 | :ok |
201 | :created | |
202 | :accepted | |
203 | :non_authoritative_information | |
204 | :no_content | |
205 | :reset_content | |
206 | :partial_content | |
207 | :multi_status | |
208 | :already_reported | |
226 | :im_used | |
Redirection | 300 | :multiple_choices |
301 | :moved_permanently | |
302 | :found | |
303 | :see_other | |
304 | :not_modified | |
305 | :use_proxy | |
307 | :temporary_redirect | |
308 | :permanent_redirect | |
Client Error | 400 | :bad_request |
401 | :unauthorized | |
402 | :payment_required | |
403 | :forbidden | |
404 | :not_found | |
405 | :method_not_allowed | |
406 | :not_acceptable | |
407 | :proxy_authentication_required | |
408 | :request_timeout | |
409 | :conflict | |
410 | :gone | |
411 | :length_required | |
412 | :precondition_failed | |
413 | :payload_too_large | |
414 | :uri_too_long | |
415 | :unsupported_media_type | |
416 | :range_not_satisfiable | |
417 | :expectation_failed | |
421 | :misdirected_request | |
422 | :unprocessable_entity | |
423 | :locked | |
424 | :failed_dependency | |
426 | :upgrade_required | |
428 | :precondition_required | |
429 | :too_many_requests | |
431 | :request_header_fields_too_large | |
451 | :unavailable_for_legal_reasons | |
Server Error | 500 | :internal_server_error |
501 | :not_implemented | |
502 | :bad_gateway | |
503 | :service_unavailable | |
504 | :gateway_timeout | |
505 | :http_version_not_supported | |
506 | :variant_also_negotiates | |
507 | :insufficient_storage | |
508 | :loop_detected | |
510 | :not_extended | |
511 | :network_authentication_required |
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK