модуль ActionController::TestCase::Behavior
Константы
- FORMAT_KWARGS
- REQUEST_KWARGS
Атрибуты
Публичные методы экземпляров
# File actionpack/lib/action_controller/test_case.rb, line 618 def build_response(klass) klass.create end
# File actionpack/lib/action_controller/test_case.rb, line 578 def controller_class_name @controller.class.anonymous? ? "anonymous" : @controller.class.controller_path end
# File actionpack/lib/action_controller/test_case.rb, line 414
def delete(action, *args)
process_with_kwargs("DELETE", action, *args)
end Имитирует запрос DELETE с заданными параметрами и устанавливает/возвращает ответ. См. get для получения дополнительной информации.
# File actionpack/lib/action_controller/test_case.rb, line 582 def generated_path(generated_extras) generated_extras[0] end
# 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' }
Обратите внимание, что метод запроса не проверяется. Различные методы доступны для повышения выразительности тестов.
# File actionpack/lib/action_controller/test_case.rb, line 420
def head(action, *args)
process_with_kwargs("HEAD", action, *args)
end Имитирует запрос HEAD с заданными параметрами и устанавливает/возвращает ответ. См. get для получения дополнительной информации.
# File actionpack/lib/action_controller/test_case.rb, line 402
def patch(action, *args)
process_with_kwargs("PATCH", action, *args)
end Имитирует запрос PATCH с заданными параметрами и устанавливает/возвращает ответ. См. get для получения дополнительной информации.
# File actionpack/lib/action_controller/test_case.rb, line 396
def post(action, *args)
process_with_kwargs("POST", action, *args)
end Имитирует запрос POST с заданными параметрами и устанавливает/возвращает ответ. См. get для получения дополнительной информации.
# 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 соответственно, что повысит выразительность тестов.
Обратите внимание, что метод запроса не проверяется.
# File actionpack/lib/action_controller/test_case.rb, line 408
def put(action, *args)
process_with_kwargs("PUT", action, *args)
end Имитирует запрос PUT с заданными параметрами и устанавливает/возвращает ответ. См. get для получения дополнительной информации.
# File actionpack/lib/action_controller/test_case.rb, line 586 def query_parameter_names(generated_extras) generated_extras[1] + [:controller, :action] end
# 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 # 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
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.