123456789_123456789_123456789_123456789_123456789_

Module: ActionController::TestCase::Behavior

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Defined in: actionpack/lib/action_controller/test_case.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

::ActionDispatch::TestProcess - Included

#assigns, #cookies,
#fixture_file_upload

Shortcut for Rack::Test::UploadedFile.new(File.join(ActionController::TestCase.fixture_path, path), type):

#flash, #redirect_to_url, #session

DSL Calls

included

[ GitHub ]


693
694
695
696
697
698
# File 'actionpack/lib/action_controller/test_case.rb', line 693

included do
  include ActionController::TemplateAssertions
  include ActionDispatch::Assertions
  class_attribute :_controller_class
  setup :setup_controller_request_and_response
end

Instance Attribute Details

#request (readonly)

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 459

attr_reader :response, :request

#response (readonly)

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 459

attr_reader :response, :request

Instance Method Details

#build_request

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 685

def build_request
  TestRequest.new
end

#build_response(klass)

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 689

def build_response(klass)
  klass.new
end

#delete(action, *args)

Simulate a DELETE request with the given parameters and set/volley the response. See #get for more details.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 537

def delete(action, *args)
  process(action, "DELETE", *args)
end

#get(action, *args)

Simulate a GET request with the given parameters.

  • action: The controller action to call.

  • parameters: The HTTP parameters that you want to pass. This may be nil, a hash, or 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.

You can also simulate POST, PATCH, PUT, DELETE, and HEAD requests with #post, #patch, #put, #delete, and #head.

Note that the request method is not verified. The different methods are available to make the tests more expressive.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 513

def get(action, *args)
  process(action, "GET", *args)
end

#head(action, *args)

Simulate a HEAD request with the given parameters and set/volley the response. See #get for more details.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 543

def head(action, *args)
  process(action, "HEAD", *args)
end

#paramify_values(hash_or_array_or_value)

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 557

def paramify_values(hash_or_array_or_value)
  case hash_or_array_or_value
  when Hash
    Hash[hash_or_array_or_value.map{|key, value| [key, paramify_values(value)] }]
  when Array
    hash_or_array_or_value.map {|i| paramify_values(i)}
  when Rack::Test::UploadedFile, ActionDispatch::Http::UploadedFile
    hash_or_array_or_value
  else
    hash_or_array_or_value.to_param
  end
end

#patch(action, *args)

Simulate a PATCH request with the given parameters and set/volley the response. See #get for more details.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 525

def patch(action, *args)
  process(action, "PATCH", *args)
end

#post(action, *args)

Simulate a POST request with the given parameters and set/volley the response. See #get for more details.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 519

def post(action, *args)
  process(action, "POST", *args)
end

#process(action, http_method = 'GET', *args)

Simulate a HTTP request to action by specifying request method, parameters and set/volley the response.

  • action: The controller action to call.

  • http_method: Request method used to send the http request. Possible values are GET, POST, PATCH, PUT, DELETE, HEAD. Defaults to GET.

  • parameters: The HTTP parameters. This may be nil, a hash, or 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.

Example calling create action and sending two params:

process :create, 'POST', user: { name: 'Gaurish Sharma', email: 'user@example.com' }

Example sending parameters, nil session and setting a flash message:

process :view, 'GET', { id: 7 }, nil, { 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.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 595

def process(action, http_method = 'GET', *args)
  check_required_ivars

  if args.first.is_a?(String) && http_method != 'HEAD'
    @request.env['RAW_POST_DATA'] = args.shift
  end

  parameters, session, flash = args
  parameters ||= {}

  # Ensure that numbers and symbols passed as params are converted to
  # proper params, as is the case when engaging rack.
  parameters = paramify_values(parameters) if html_format?(parameters)

  @html_document = nil
  @html_scanner_document = nil

  unless @controller.respond_to?(:recycle!)
    @controller.extend(Testing::Functional)
  end

  @request.recycle!
  @response.recycle!
  @controller.recycle!

  @request.env['REQUEST_METHOD'] = http_method

  controller_class_name = @controller.class.anonymous? ?
    "anonymous" :
    @controller.class.controller_path

  @request.assign_parameters(@routes, controller_class_name, action.to_s, parameters)

  @request.session.update(session) if session
  @request.flash.update(flash || {})

  @controller.request  = @request
  @controller.response = @response

  build_request_uri(action, parameters)

  name = @request.parameters[:action]

  @controller.recycle!
  @controller.process(name)

  if cookies = @request.env['action_dispatch.cookies']
    unless @response.committed?
      cookies.write(@response)
    end
  end
  @response.prepare!

  @assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {}

  if flash_value = @request.flash.to_session_value
    @request.session['flash'] = flash_value
  end

  @response
end

#put(action, *args)

Simulate a PUT request with the given parameters and set/volley the response. See #get for more details.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 531

def put(action, *args)
  process(action, "PUT", *args)
end

#setup_controller_request_and_response

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 657

def setup_controller_request_and_response
  @controller = nil unless defined? @controller

  response_klass = 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          = build_request
  @response         = build_response response_klass
  @response.request = @request

  if @controller
    @controller.request = @request
    @controller.params = {}
  end
end

#xhr(request_method, action, parameters = nil, session = nil, flash = nil)

Alias for #xml_http_request.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 555

alias xhr :xml_http_request

#xml_http_request(request_method, action, parameters = nil, session = nil, flash = nil) Also known as: #xhr

[ GitHub ]

  
# File 'actionpack/lib/action_controller/test_case.rb', line 547

def xml_http_request(request_method, action, parameters = nil, session = nil, flash = nil)
  @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
  @request.env['HTTP_ACCEPT'] ||=  [Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
  __send__(request_method, action, parameters, session, flash).tap do
    @request.env.delete 'HTTP_X_REQUESTED_WITH'
    @request.env.delete 'HTTP_ACCEPT'
  end
end