Spec-Zone.ru › Ruby on Rails 4.2

модуль ActionController::TestCase::Behavior

Включенные модули:
ActionDispatch::TestProcess, ActiveSupport::Testing::ConstantLookup, ActionController::TemplateAssertions, ActionDispatch::Assertions

Атрибуты

request[Ч]
response[Ч]

Публичные методы экземпляра

build_request() Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 685
def build_request
  TestRequest.new
end
build_response(klass) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 689
def build_response(klass)
  klass.new
end
delete(action, *args) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 537
def delete(action, *args)
  process(action, "DELETE", *args)
end

Имитирует запрос DELETE с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.

get(action, *args) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 513
def get(action, *args)
  process(action, "GET", *args)
end

Имитирует запрос GET с заданными параметрами.

  • action: Действие контроллера, которое необходимо вызвать.

  • parameters: HTTP-параметры, которые необходимо передать. Это может быть nil, хеш или строка, соответствующим образом закодированная (application/x-www-form-urlencoded или multipart/form-data).

  • session: Хеш параметров для сохранения в сессии. Это может быть nil.

  • flash: Хеш параметров для сохранения в флэше. Это может быть nil.

Вы также можете имитировать запросы POST, PATCH, PUT, DELETE и HEAD с помощью post, patch, put, delete, и head.

Обратите внимание, что метод запроса не проверяется. Различные методы доступны для повышения выразительности тестов.

head(action, *args) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 543
def head(action, *args)
  process(action, "HEAD", *args)
end

Имитирует запрос HEAD с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.

paramify_values(hash_or_array_or_value) Показать исходный код
# 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) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 525
def patch(action, *args)
  process(action, "PATCH", *args)
end

Имитирует запрос PATCH с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.

post(action, *args) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 519
def post(action, *args)
  process(action, "POST", *args)
end

Имитирует запрос POST с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.

process(action, http_method = 'GET', *args) Показать исходный код
# 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

Имитирует HTTP-запрос к action, указав метод запроса, параметры и устанавливая/получая ответ.

  • action: Действие контроллера, которое необходимо вызвать.

  • http_method: Метод запроса, используемый для отправки HTTP-запроса. Возможные значения: GET, POST, PATCH, PUT, DELETE, HEAD. По умолчанию GET.

  • parameters: HTTP-параметры. Это может быть nil, хеш или строка, соответствующим образом закодированная (application/x-www-form-urlencoded или multipart/form-data).

  • session: Хеш параметров для сохранения в сессии. Это может быть nil.

  • flash: Хеш параметров для сохранения во флэше. Это может быть nil.

Пример вызова действия create и отправки двух параметров:

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

Пример отправки параметров, nil сессии и установки сообщения во флэше:

process :view, 'GET', { id: 7 }, nil, { notice: 'This is flash message' }

Для имитации GET, POST, PATCH, PUT, DELETE и HEAD запросов предпочтительнее использовать методы get, post, patch, put, delete и head соответственно, что сделает тесты более выразительными.

Обратите внимание, что метод запроса не проверяется.

put(action, *args) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 531
def put(action, *args)
  process(action, "PUT", *args)
end

Имитирует запрос PUT с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.

setup_controller_request_and_response() Показать исходный код
# 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)
Псевдоним для: xml_http_request
xml_http_request(request_method, action, parameters = nil, session = nil, flash = nil) Показать исходный код
# 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
Также алиас для: xhr

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API