- B
- C
- D
- G
- H
- P
- Q
- S
- X
- ActionDispatch::TestProcess
- ActiveSupport::Testing::ConstantLookup
- Rails::Dom::Testing::Assertions
- ActionController::TemplateAssertions
- ActionDispatch::Assertions
| REQUEST_KWARGS | = | %i(params session flash method body xhr) |
| FORMAT_KWARGS | = | %i(format as) |
| [R] | request | |
| [R] | response |
Simulate a DELETE request with the given parameters and set/volley the
response. See get for more details.
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-urlencodedormultipart/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.
Simulate a HEAD request with the given parameters and set/volley the
response. See get for more details.
Simulate a PATCH request with the given parameters and set/volley the
response. See get for more details.
Simulate a POST request with the given parameters and set/volley the
response. See get for more details.
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-urlencodedormultipart/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: 'user@example.com' }
},
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 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 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 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