instance method process

Ruby on Rails 5.0.7.2

Since v3.0.20

Available in: v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.11.3 v5.0.7.2 v5.1.7 v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3.2 v8.0.5.1 v8.1.3.1 edge

Signature

process(action, *args)

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 are GET, POST, PATCH, PUT, DELETE, HEAD. Defaults to GET. Can be a symbol.

  • params: The hash with HTTP parameters that you want to pass. This may be nil.

  • body: The request body with a string that is appropriately encoded (application/x-www-form-urlencoded or multipart/form-data).

  • 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:

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.

Parameters

action req
args rest
Source
# 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

Defined in actionpack/lib/action_controller/test_case.rb line 469 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActionController::TestCase::Behavior

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close