Spec-Zone.ru › Ruby on Rails 5.0

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

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

Константы

FORMAT_KWARGS
REQUEST_KWARGS

Атрибуты

request[R]
response[R]

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

build_response(klass) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 618
def build_response(klass)
  klass.create
end
controller_class_name() Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 578
def controller_class_name
  @controller.class.anonymous? ? "anonymous" : @controller.class.controller_path
end
delete(action, *args) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 414
def delete(action, *args)
  process_with_kwargs("DELETE", action, *args)
end

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

generated_path(generated_extras) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 582
def generated_path(generated_extras)
  generated_extras[0]
end
get(action, *args) Показать исходный код
# 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

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

  • action: Действие контроллера, которое нужно вызвать.

  • params: Хэш с HTTP-параметрами, которые нужно передать. Это может быть nil.

  • body: Тело запроса со строкой, соответствующим образом закодированной (application/x-www-form-urlencoded или multipart/form-data).

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

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

Вы также можете имитировать запросы POST, PATCH, PUT, DELETE и HEAD с помощью post, patch, put, delete, и head. Пример передачи параметров, сессии и установки всплывающего сообщения:

get :show,
  params: { id: 7 },
  session: { user_id: 1 },
  flash: { notice: 'This is flash message' }

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

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

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

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

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

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

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

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

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

  • action: Действие контроллера, которое нужно вызвать.

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

  • params: Хэш с HTTP-параметрами, которые нужно передать. Это может быть nil.

  • body: Тело запроса со строкой, соответствующим образом закодированной (application/x-www-form-urlencoded или multipart/form-data).

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

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

  • format: Формат запроса. По умолчанию nil. Может быть строкой или символом.

  • as: Тип содержимого. По умолчанию nil. Должен быть символом, соответствующим MIME-типу.

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

process :create,
  method: 'POST',
  params: {
    user: { name: 'Gaurish Sharma', email: 'user@example.com' }
  },
  session: { user_id: 1 },
  flash: { 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 408
def put(action, *args)
  process_with_kwargs("PUT", action, *args)
end

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

query_parameter_names(generated_extras) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 586
def query_parameter_names(generated_extras)
  generated_extras[1] + [:controller, :action]
end
setup_controller_request_and_response() Показать исходный код
# 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
xhr(*args)
Псевдоним для: xml_http_request
xml_http_request(*args) Показать исходный код
# 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
Также является псевдонимом для: xhr

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

Spec-Zone.ru

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