модуль ActionController::TestCase::Behavior
Атрибуты
Публичные методы экземпляра
# File actionpack/lib/action_controller/test_case.rb, line 685 def build_request TestRequest.new end
# File actionpack/lib/action_controller/test_case.rb, line 689 def build_response(klass) klass.new end
# File actionpack/lib/action_controller/test_case.rb, line 537 def delete(action, *args) process(action, "DELETE", *args) end
Имитирует запрос DELETE с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.
# 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.
Обратите внимание, что метод запроса не проверяется. Различные методы доступны для повышения выразительности тестов.
# File actionpack/lib/action_controller/test_case.rb, line 543 def head(action, *args) process(action, "HEAD", *args) end
Имитирует запрос HEAD с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.
# 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 # File actionpack/lib/action_controller/test_case.rb, line 525 def patch(action, *args) process(action, "PATCH", *args) end
Имитирует запрос PATCH с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.
# File actionpack/lib/action_controller/test_case.rb, line 519 def post(action, *args) process(action, "POST", *args) end
Имитирует запрос POST с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.
# 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 соответственно, что сделает тесты более выразительными.
Обратите внимание, что метод запроса не проверяется.
# File actionpack/lib/action_controller/test_case.rb, line 531 def put(action, *args) process(action, "PUT", *args) end
Имитирует запрос PUT с заданными параметрами и устанавливает/получает ответ. См. get для получения более подробной информации.
# 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 # 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
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.