Spec-Zone.ru › Ruby on Rails 7.2

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

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

Атрибуты

request[R]
response[R]

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

build_response(klass) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 584
def build_response(klass)
  klass.create
end
controller_class_name() Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 544
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 455
def delete(action, **args)
  process(action, method: "DELETE", **args)
end

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

generated_path(generated_extras) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 548
def generated_path(generated_extras)
  generated_extras[0]
end
get(action, **args) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 429
def get(action, **args)
  res = process(action, method: "GET", **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 461
def head(action, **args)
  process(action, method: "HEAD", **args)
end

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

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

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

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

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

process(action, method: "GET", params: nil, session: nil, body: nil, flash: {}, format: nil, xhr: false, as: nil) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 504
def process(action, method: "GET", params: nil, session: nil, body: nil, flash: {}, format: nil, xhr: false, as: nil)
  check_required_ivars
  @controller.clear_instance_variables_between_requests

  action = +action.to_s
  http_method = method.to_s.upcase

  @html_document = nil

  cookies.update(@request.cookies)
  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, @controller.class
  @response         = build_response @response_klass
  @response.request = @request
  @controller.recycle!

  if body
    @request.set_header "RAW_POST_DATA", body
  end

  @request.set_header "REQUEST_METHOD", http_method

  if as
    @request.content_type = Mime[as].to_s
    format ||= as
  end

  parameters = (params || {}).symbolize_keys

  if format
    parameters[:format] = format
  end

  setup_request(controller_class_name, action, parameters, session, flash, xhr)
  process_controller_response(action, cookies, xhr)
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 соответственно, что повысит выразительность тестов.

Не рекомендуется выполнять более одного запроса в одном тесте. Переменные экземпляра, установленные в одном запросе, не будут сохраняться для следующего запроса, но не гарантируется, что весь внутренний состояние Rails будет сброшен. Для выполнения нескольких запросов в одном тесте предпочтительнее использовать ActionDispatch::IntegrationTest.

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

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

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

query_parameter_names(generated_extras) Показать исходный код
# File actionpack/lib/action_controller/test_case.rb, line 552
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 556
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(@controller.class)
  @response         = build_response @response_klass
  @response.request = @request

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

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

Spec-Zone.ru

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