Set the request type if as: is specified

Documentation & testing
上级 fd0c33d7
* Add `:as` option to `ActionController:TestCase#process` and related methods.
Specifying as: :mime_type allows the `CONTENT_TYPE` header to be specified
in controller tests without manually doing this through `@request.headers...`
* Show cache hits and misses when rendering partials.
Partials using the `cache` helper will show whether a render hit or missed
......
......@@ -449,6 +449,8 @@ def xml_http_request(*args)
# - +session+: A hash of parameters to store in the session. This may be +nil+.
# - +flash+: A hash of parameters to store in the flash. This may be +nil+.
# - +format+: Request format. Defaults to +nil+. Can be string or symbol.
# - +as+: Content type. Defaults to +nil+. Must be a symbol that corresponds
# to a mime type
#
# Example calling +create+ action and sending two params:
#
......@@ -469,7 +471,7 @@ def process(action, *args)
check_required_ivars
if kwarg_request?(args)
parameters, session, body, flash, http_method, format, xhr = args[0].values_at(:params, :session, :body, :flash, :method, :format, :xhr)
parameters, session, body, flash, http_method, format, xhr, as = args[0].values_at(:params, :session, :body, :flash, :method, :format, :xhr, :as)
else
http_method, parameters, session, flash = args
format = nil
......@@ -514,6 +516,11 @@ def process(action, *args)
@request.set_header "REQUEST_METHOD", http_method
if as
@request.content_type = Mime[as].to_s
format ||= as
end
parameters = parameters.symbolize_keys
generated_extras = @routes.generate_extras(parameters.merge(controller: controller_class_name, action: action.to_s))
......
......@@ -637,6 +637,15 @@ def test_params_passing_doesnt_modify_in_place
assert_equal "application/json", parsed_env["CONTENT_TYPE"]
end
def test_using_as_json_sets_request_content_type_to_json
post :render_body, params: { bool_value: true, str_value: "string", num_value: 2 }, as: :json
assert_equal "application/json", @request.headers["CONTENT_TYPE"]
assert_equal true, @request.request_parameters[:bool_value]
assert_equal "string", @request.request_parameters[:str_value]
assert_equal 2, @request.request_parameters[:num_value]
end
def test_mutating_content_type_headers_for_plain_text_files_sets_the_header
@request.headers["Content-Type"] = "text/plain"
post :render_body, params: { name: "foo.txt" }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册