module ActionController::TestCase::Behavior
Constants
- FORMAT_KWARGS
- REQUEST_KWARGS
Attributes
Public Instance Methods
# File actionpack/lib/action_controller/test_case.rb, line 618 def build_response(klass) klass.create end
# File actionpack/lib/action_controller/test_case.rb, line 578 def controller_class_name @controller.class.anonymous? ? "anonymous" : @controller.class.controller_path end
# File actionpack/lib/action_controller/test_case.rb, line 414 def delete(action, *args) process_with_kwargs("DELETE", action, *args) end
Simulate a DELETE request with the given parameters and set/volley the response. See get
for more details.
# File actionpack/lib/action_controller/test_case.rb, line 582 def generated_path(generated_extras) generated_extras[0] end
# File actionpack/lib/action_controller/test_case.rb, line 388 def get(action, *args) res = process_with_kwargs("GET", action, *args) cookies.update res.cookies res end
Simulate a GET request with the given parameters.
-
action
: The controller action to call. -
params
: The hash with HTTP parameters that you want to pass. This may benil
. -
body
: The request body with a string that is appropriately encoded (application/x-www-form-urlencoded
ormultipart/form-data
). -
session
: A hash of parameters to store in the session. This may benil
. -
flash
: A hash of parameters to store in the flash. This may benil
.
You can also simulate POST, PATCH, PUT, DELETE, and HEAD requests with post
, patch
, put
, delete
, and head
. Example sending parameters, session and setting a flash message:
get :show, params: { id: 7 }, session: { user_id: 1 }, flash: { notice: 'This is flash message' }
Note that the request method is not verified. The different methods are available to make the tests more expressive.
# File actionpack/lib/action_controller/test_case.rb, line 420 def head(action, *args) process_with_kwargs("HEAD", action, *args) end
Simulate a HEAD request with the given parameters and set/volley the response. See get
for more details.
# File actionpack/lib/action_controller/test_case.rb, line 402 def patch(action, *args) process_with_kwargs("PATCH", action, *args) end
Simulate a PATCH request with the given parameters and set/volley the response. See get
for more details.
# File actionpack/lib/action_controller/test_case.rb, line 396 def post(action, *args) process_with_kwargs("POST", action, *args) end
Simulate a POST request with the given parameters and set/volley the response. See get
for more details.
# File actionpack/lib/action_controller/test_case.rb, line 469 def process(action, *args) check_required_ivars if kwarg_request?(args) 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 if parameters.is_a?(String) && http_method != 'HEAD' body = parameters parameters = nil end if parameters || session || flash non_kwarg_request_warning end end if body @request.set_header 'RAW_POST_DATA', body end if http_method http_method = http_method.to_s.upcase else http_method = "GET" end parameters ||= {} @html_document = nil self.cookies.update @request.cookies self.cookies.update_cookies_from_jar @request.set_header 'HTTP_COOKIE', cookies.to_header @request.delete_header 'action_dispatch.cookies' @request = TestRequest.new scrub_env!(@request.env), @request.session @response = build_response @response_klass @response.request = @request @controller.recycle! @request.set_header 'REQUEST_METHOD', http_method if as @request.content_type = Mime[as].to_s format ||= as end if format parameters[:format] = format end parameters = parameters.symbolize_keys generated_extras = @routes.generate_extras(parameters.merge(controller: controller_class_name, action: action.to_s)) generated_path = generated_path(generated_extras) query_string_keys = query_parameter_names(generated_extras) @request.assign_parameters(@routes, controller_class_name, action.to_s, parameters, generated_path, query_string_keys) @request.session.update(session) if session @request.flash.update(flash || {}) if xhr @request.set_header 'HTTP_X_REQUESTED_WITH', 'XMLHttpRequest' @request.fetch_header('HTTP_ACCEPT') do |k| @request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], 'text/xml', '*/*'].join(', ') end end @request.fetch_header("SCRIPT_NAME") do |k| @request.set_header k, @controller.config.relative_url_root end begin @controller.recycle! @controller.dispatch(action, @request, @response) ensure @request = @controller.request @response = @controller.response if @request.have_cookie_jar? unless @request.cookie_jar.committed? @request.cookie_jar.write(@response) self.cookies.update(@request.cookie_jar.instance_variable_get(:@cookies)) end end @response.prepare! if flash_value = @request.flash.to_session_value @request.session['flash'] = flash_value else @request.session.delete('flash') end if xhr @request.delete_header 'HTTP_X_REQUESTED_WITH' @request.delete_header 'HTTP_ACCEPT' end @request.query_string = '' @response.sent! end @response end
Simulate an HTTP request to action
by specifying request method, parameters and set/volley the response.
-
action
: The controller action to call. -
method
: Request method used to send the HTTP request. Possible values areGET
,POST
,PATCH
,PUT
,DELETE
,HEAD
. Defaults toGET
. Can be a symbol. -
params
: The hash with HTTP parameters that you want to pass. This may benil
. -
body
: The request body with a string that is appropriately encoded (application/x-www-form-urlencoded
ormultipart/form-data
). -
session
: A hash of parameters to store in the session. This may benil
. -
flash
: A hash of parameters to store in the flash. This may benil
. -
format
: Request format. Defaults tonil
. Can be string or symbol. -
as
: Content type. Defaults tonil
. Must be a symbol that corresponds to a mime type.
Example calling create
action and sending two params:
process :create, method: 'POST', params: { user: { name: 'Gaurish Sharma', email: '[email protected]' } }, session: { user_id: 1 }, flash: { notice: 'This is flash message' }
To simulate GET
, POST
, PATCH
, PUT
, DELETE
and HEAD
requests prefer using get, post, patch, put, delete and head methods respectively which will make tests more expressive.
Note that the request method is not verified.
# File actionpack/lib/action_controller/test_case.rb, line 408 def put(action, *args) process_with_kwargs("PUT", action, *args) end
Simulate a PUT request with the given parameters and set/volley the response. See get
for more details.
# File actionpack/lib/action_controller/test_case.rb, line 586 def query_parameter_names(generated_extras) generated_extras[1] + [:controller, :action] end
# File actionpack/lib/action_controller/test_case.rb, line 590 def setup_controller_request_and_response @controller = nil unless defined? @controller @response_klass = ActionDispatch::TestResponse if klass = self.class.controller_class if klass < ActionController::Live @response_klass = LiveTestResponse end unless @controller begin @controller = klass.new rescue warn "could not construct controller #{klass}" if $VERBOSE end end end @request = TestRequest.create @response = build_response @response_klass @response.request = @request if @controller @controller.request = @request @controller.params = {} end end
# File actionpack/lib/action_controller/test_case.rb, line 424 def xml_http_request(*args) ActiveSupport::Deprecation.warn(" `xhr` and `xml_http_request` are deprecated and will be removed in Rails 5.1. Switch to e.g. `post :create, params: { comment: { body: 'Honey bunny' } }, xhr: true`. ".strip_heredoc) @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest' @request.env['HTTP_ACCEPT'] ||= [Mime[:js], Mime[:html], Mime[:xml], 'text/xml', '*/*'].join(', ') __send__(*args).tap do @request.env.delete 'HTTP_X_REQUESTED_WITH' @request.env.delete 'HTTP_ACCEPT' end end
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.