في مواصفات جهاز التحكم ، يمكنني ضبط http قبول رأس مثل هذا:
request.accept = "application/json"
لكن في طلب المواصفات ، كائن "request" لا شيء. فكيف يمكنني أن أفعل ذلك هنا؟
السبب في أنني أرغب في تعيين http قبول رأس إلى 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"}
أنا استخدم هذا في اختبار :: وحدة:
@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index
بالنسبة لي أنها تعمل request.headers["My Header"] = "something"
بسيطة
أقوم بإضافة هذا هنا ، حيث واجهت مشكلة في محاولة القيام بذلك في Rails 5.1.rc1
الحصول على توقيع الأسلوب مختلف قليلاً الآن.
تحتاج إلى تحديد الخيارات بعد المسار كوسيطات للكلمات الرئيسية ، أي.
get /some/path, headers: {'ACCEPT' => 'application/json'}
لمعلوماتك ، المجموعة الكاملة من وسيطات الكلمات الأساسية هي:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
باستخدام 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 الرسمية (يشير الرابط إلى الإصدار 3.7)
لإرسال كل من xhr: true
والرؤوس ، كان عليّ القيام بذلك على سبيل المثال:
my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
جرب شيئًا مثل:
get :index, :format => 'json'
تمت الإجابة عن سؤالك بالفعل ولكن في حالة رغبتك في POST إجراءً آخر ، عليك القيام بذلك:
post :save, {format: :json, application: {param1: "test", param2: "test"}}