컨트롤러 사양에서 다음과 같이 http accept 헤더를 설정할 수 있습니다.
request.accept = "application/json"
그러나 요청 스펙에서 “요청”오브젝트는 nil입니다. 어떻게해야합니까?
http accept 헤더를 json으로 설정하려는 이유는 다음과 같습니다.
get '/my/path'
이 대신
get '/my/path.json'
답변
여기에 설명 된대로 HTTP 헤더를 get () 메소드의 세 번째 인수로 지정할 수 있어야합니다.
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"}
답변
나는 이것을 Test :: Unit에서 사용했다 :
@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"
답변
헤더를 별도로 설정해야합니다
request.headers["Accept"] = "application/json"
get / delete / ….를 통해 전송을 시도하면 rails4의 완전한 쓰레기이며 헤더로 보내지 않고 매개 변수로 보내지기 때문에 머리에 통증을 유발합니다.
{"Accept" => "application/json"}
답변
함께 rspec 사용 Rack::Test::Methods
header 'X_YOUR_HEADER_VAR', 'val'
get '/path'
헤더 var는 다음과 같이 나타납니다. X-Your-Header-Var
답변
RSpec 3에서는 다음 구문을 사용할 수 있습니다
get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
공식 Rspec 문서에 설명 된 대로 (링크는 v3.7을 가리킴 )
