跳至內容 跳至搜尋
命名空間
方法
B
C
D
G
H
P
Q
S
已包含模組

屬性

[R] request
[R] response

實例公開方法

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)

使用給定的參數模擬 DELETE 請求,並設定/處理回應。詳情請參閱 get

# File actionpack/lib/action_controller/test_case.rb, line 455
def delete(action, **args)
  process(action, method: "DELETE", **args)
end

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)

使用給定的參數模擬 GET 請求。

  • action:要呼叫的控制器動作。

  • params:您想要傳遞的 HTTP 參數雜湊。可以是 nil

  • body:請求主體,包含一個經過適當編碼的字串(application/x-www-form-urlencodedmultipart/form-data)。

  • session:要儲存在工作階段中的參數雜湊。可以是 nil

  • flash:要儲存在快閃訊息中的參數雜湊。可以是 nil

您也可以使用 postpatchputdeletehead 模擬 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 431
def get(action, **args)
  process(action, method: "GET", **args)
end

head(action, **args)

使用給定的參數模擬 HEAD 請求,並設定/處理回應。詳情請參閱 get

# File actionpack/lib/action_controller/test_case.rb, line 461
def head(action, **args)
  process(action, method: "HEAD", **args)
end

patch(action, **args)

使用給定的參數模擬 PATCH 請求,並設定/處理回應。詳情請參閱 get

# File actionpack/lib/action_controller/test_case.rb, line 443
def patch(action, **args)
  process(action, method: "PATCH", **args)
end

post(action, **args)

使用給定的參數模擬 POST 請求,並設定/處理回應。詳情請參閱 `get`。

# File actionpack/lib/action_controller/test_case.rb, line 437
def post(action, **args)
  process(action, method: "POST", **args)
end

process(action, method: "GET", params: nil, session: nil, body: nil, flash: {}, format: nil, xhr: false, as: nil)

透過指定請求方法、參數來模擬對 `action` 的 HTTP 請求,並設定/處理回應。

  • action:要呼叫的控制器動作。

  • method:用於發送 HTTP 請求的請求方法。可能的值為 `GET`、`POST`、`PATCH`、`PUT`、`DELETE`、`HEAD`。預設為 `GET`。可以是符號。

  • params:您想要傳遞的 HTTP 參數雜湊。可以是 nil

  • body:請求主體,包含一個經過適當編碼的字串(application/x-www-form-urlencodedmultipart/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' }

若要模擬 GETPOSTPATCHPUTDELETEHEAD 請求,建議使用 getpostpatchputdeletehead 方法,這些方法將使測試更具表達性。

不建議在同一個測試中發出多個請求。在一個請求中設定的實例變數不會持續到下一個請求,但不保證所有 Rails 內部狀態都會被重設。若要在同一個測試中發出多個請求,建議使用 ActionDispatch::IntegrationTest

請注意,不會驗證請求方法。

# 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

put(action, **args)

使用給定的參數模擬 PUT 請求,並設定/處理回應。詳情請參閱 get

# File actionpack/lib/action_controller/test_case.rb, line 449
def put(action, **args)
  process(action, method: "PUT", **args)
end

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