it-swarm.asia

كيفية تعيين رؤوس الطلب في المواصفات طلب rspec؟

في مواصفات جهاز التحكم ، يمكنني ضبط http قبول رأس مثل هذا:

request.accept = "application/json"

لكن في طلب المواصفات ، كائن "request" لا شيء. فكيف يمكنني أن أفعل ذلك هنا؟

السبب في أنني أرغب في تعيين http قبول رأس إلى json هو بحيث يمكنني القيام بذلك:

get '/my/path'

بدلا من هذا

get '/my/path.json'
118
Sergey

يجب أن تكون قادرًا على تحديد رؤوس 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"}
130
awaage

أنا استخدم هذا في اختبار :: وحدة:

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

بالنسبة لي أنها تعمل request.headers["My Header"] = "something" بسيطة

18
morgoth

أقوم بإضافة هذا هنا ، حيث واجهت مشكلة في محاولة القيام بذلك في Rails 5.1.rc1

الحصول على توقيع الأسلوب مختلف قليلاً الآن.

تحتاج إلى تحديد الخيارات بعد المسار كوسيطات للكلمات الرئيسية ، أي.

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

لمعلوماتك ، المجموعة الكاملة من وسيطات الكلمات الأساسية هي:

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

13
Jules Copeland

باستخدام rspec مع Rack::Test::Methods

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

سيأتي العنوان var كـ X-Your-Header-Var

8
marcusb

يجب أن أقوم بإعداد الرؤوس بشكل منفصل

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

محاولة إرسالها عبر get/delete/.... هي مكتملة في Rails4 وتسبب ألمًا في رأسي لأنها لا ترسل أبداً كرأس ولكن كمعلمة.

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

مع RSpec 3 ، يمكنك استخدام بناء الجملة التالي

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

كما هو موضح في وثائق Rspec الرسمية (يشير الرابط إلى الإصدار 3.7)

4
Cyril Duchon-Doris

لإرسال كل من xhr: true والرؤوس ، كان عليّ القيام بذلك على سبيل المثال:

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

جرب شيئًا مثل:

get :index, :format => 'json' 
3
gayavat

تمت الإجابة عن سؤالك بالفعل ولكن في حالة رغبتك في POST إجراءً آخر ، عليك القيام بذلك:

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