programing

rspec 요청 사양에서 요청 헤더를 설정하려면 어떻게 해야 합니다.

starjava 2023. 3. 18. 08:13
반응형

rspec 요청 사양에서 요청 헤더를 설정하려면 어떻게 해야 합니다.

컨트롤러 사양에서는 다음과 같이http accept 헤더를 설정할 수 있습니다.

request.accept = "application/json"

단, 요청 사양에서는 "request" 객체는 0입니다.그럼 여기서 어떻게 하죠?

http accept 헤더를 json으로 설정하는 이유는 다음과 같습니다.

get '/my/path'

이것 대신에

get '/my/path.json'

다음과 같이 get() 메서드의 세 번째 인수로 HTTP 헤더를 지정할 수 있습니다.

http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get

그리고 여기

http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html#method-i-process

다음과 같은 작업을 수행할 수 있습니다.

get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}

테스트에서 사용:단위:

@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index

Rails 5.1.rc1에서 이 작업을 수행하려다 크게 막혔기 때문에 여기에 추가합니다.

get 메서드의 시그니처가 조금 다릅니다.

경로 뒤에 있는 옵션을 키워드 인수로 지정해야 합니다.

get /some/path, headers: {'ACCEPT' => 'application/json'}

참고로 키워드 인수의 풀세트는 다음과 같습니다.

params: {}, headers: {}, env: {}, xhr: false, as: :symbol

이는 요청 사양이 아닌 컨트롤러 사양으로 작동합니다.

request.headers["My Header"] = "something"

rspec 사용Rack::Test::Methods

header 'X_YOUR_HEADER_VAR', 'val'
get '/path'

헤더 var는 다음과 같이 전달됩니다.X-Your-Header-Var

헤더를 따로 설정해야 합니다.

request.headers["Accept"] = "application/json"

get/delete/...를 통해 전송하려고 하면 rails4에서 완전히 쓰레기가 되어 헤더가 아닌 파라미터로 전송되기 때문에 머리가 아프다.

{"Accept" => "application/json"}

RSpec 3에서는 다음 구문을 사용할 수 있습니다.

get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }

공식 Rspec 문서에 기재되어 있는 바와 같이 (링크는 v3.7을 가리키고 있습니다)

둘 다 보내려면xhr: true헤더, 예를 들어 다음과 같은 작업을 수행해야 했습니다.

my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers

질문에 대한 답변은 이미 완료되었지만 다른 액션에 대해 POST를 하려면 다음 절차를 수행해야 합니다.

post :save, {format: :json, application: {param1: "test", param2: "test"}}

다음과 같은 방법을 시도해 보십시오.

get :index, :format => 'json' 

언급URL : https://stackoverflow.com/questions/9654465/how-to-set-request-headers-in-rspec-request-spec

반응형