модуль ActionController::TestCase::Behavior
Атрибуты
Открытые методы экземпляра
# File actionpack/lib/action_controller/test_case.rb, line 592 def build_response(klass) klass.create end
# File actionpack/lib/action_controller/test_case.rb, line 552 def controller_class_name @controller.class.anonymous? ? "anonymous" : @controller.class.controller_path end
# File actionpack/lib/action_controller/test_case.rb, line 463 def delete(action, **args) process(action, method: "DELETE", **args) end
Имитирует DELETE-запрос с указанными параметрами и устанавливает/возвращает ответ. Подробнее см. get.
# File actionpack/lib/action_controller/test_case.rb, line 556 def generated_path(generated_extras) generated_extras[0] end
# File actionpack/lib/action_controller/test_case.rb, line 439 def get(action, **args) process(action, method: "GET", **args) end
Имитирует GET-запрос с указанными параметрами.
-
action: действие контроллера, которое нужно вызвать. -
params: хеш HTTP-параметров, которые нужно передать. Это может бытьnil. -
body: тело запроса в виде строки с соответствующей кодировкой (application/x-www-form-urlencodedилиmultipart/form-data). -
session: хеш параметров для сохранения в сессии. Это может бытьnil. -
flash: хеш параметров для сохранения во flash. Это может бытьnil.
Также можно имитировать запросы POST, PATCH, PUT, DELETE и HEAD с помощью post, patch, put, delete и head. Пример передачи параметров и сессии, а также установки flash-сообщения:
get :show,
params: { id: 7 },
session: { user_id: 1 },
flash: { notice: 'This is flash message' }
Обратите внимание, что метод запроса не проверяется. Разные методы доступны, чтобы сделать тесты более выразительными.
# File actionpack/lib/action_controller/test_case.rb, line 469 def head(action, **args) process(action, method: "HEAD", **args) end
Имитирует HEAD-запрос с указанными параметрами и устанавливает/возвращает ответ. Подробнее см. get.
# File actionpack/lib/action_controller/test_case.rb, line 451 def patch(action, **args) process(action, method: "PATCH", **args) end
Имитирует PATCH-запрос с указанными параметрами и устанавливает/возвращает ответ. Подробнее см. get.
# File actionpack/lib/action_controller/test_case.rb, line 445 def post(action, **args) process(action, method: "POST", **args) end
Имитирует POST-запрос с указанными параметрами и устанавливает/возвращает ответ. Подробнее см. get.
# File actionpack/lib/action_controller/test_case.rb, line 512
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: хеш параметров для сохранения во 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.
Обратите внимание, что метод запроса не проверяется.
# File actionpack/lib/action_controller/test_case.rb, line 457 def put(action, **args) process(action, method: "PUT", **args) end
Имитирует PUT-запрос с указанными параметрами и устанавливает/возвращает ответ. Подробнее см. get.
# File actionpack/lib/action_controller/test_case.rb, line 560 def query_parameter_names(generated_extras) generated_extras[1] + [:controller, :action] end
# File actionpack/lib/action_controller/test_case.rb, line 564
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.