Dalam spec pengontrol, saya dapat mengatur http accept header seperti ini:
request.accept = "application/json"
tetapi dalam spec request, objek "request" tidak ada. Jadi bagaimana saya bisa melakukannya di sini?
Alasan saya ingin mengatur http accept header ke json adalah agar saya dapat melakukan ini:
get '/my/path'
bukannya ini
get '/my/path.json'
ruby-on-rails
json
testing
rspec
Sergey
sumber
sumber
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
:authorization
.get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
`Saya menggunakan ini di Test :: Unit:
sumber
ActionController::TestCase
Cookie
dalam hash header (karena itulah yang dikirim browser saya), tetapi tidak berfungsi. Lalu saya lakukanrequest.keys
dan melihat kunci bernamaHTTP_COOKIE
. Menggunakan itu berhasil. Mereka benar-benar harus mendokumentasikan ini dengan lebih baik.Saya menambahkan ini di sini, karena saya sangat macet mencoba melakukan ini di Rails 5.1.rc1
Tanda tangan metode get agak berbeda sekarang.
Anda perlu menentukan opsi setelah jalur sebagai argumen kata kunci, yaitu
get /some/path, headers: {'ACCEPT' => 'application/json'}
FYI, argumen lengkap kata kunci adalah:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
sumber
Ini berfungsi untuk spesifikasi pengontrol, bukan meminta spesifikasi:
sumber
request.headers
ataurequest.env
Saya harus mengatur tajuk secara terpisah
Mencoba mengirimkannya melalui get / delete / .... adalah sampah lengkap di rails4 dan menyebabkan rasa sakit di kepala saya karena tidak pernah mengirim sebagai header tetapi sebagai parameter.
sumber
Menggunakan rspec dengan
Rack::Test::Methods
Header var akan muncul sebagai
X-Your-Header-Var
sumber
Test::Unit
, bukan untuk RSpec.ndefined method 'header'
kesalahan bagi saya.Dengan RSpec 3 Anda dapat menggunakan sintaks berikut
Seperti yang dijelaskan dalam dokumentasi Rspec resmi (tautan menunjuk ke v3.7)
sumber
Untuk mengirim keduanya
xhr: true
dan header, saya harus melakukan mis:sumber
headers =
seharusnyamy_headers =
?Pertanyaan Anda sudah dijawab tetapi jika Anda ingin POST sesuatu ke tindakan lain Anda harus melakukan ini:
sumber
Coba sesuatu seperti:
sumber
format=json
param kueri. Tidak sama dengan bidang tajuk.