2014-05-06 7 views
6

मैं वर्तमान में apiary.io के साथ एक मौजूदा एपीआई चित्रित करने की कोशिश कर रहा हूं। सिस्टम एक लॉगिन अनुरोध के माध्यम से प्रमाणीकरण लागू करता है जो एक सत्र-आईडी युक्त एक http-कुकी देता है।एपी ब्लूप्रिंट प्रारूप में सत्रों को कैसे चित्रित किया जाए?

जहां तक ​​मुझे पता है कि यह मानक है कि ब्राउज़र एक अन्य अनुरोध करते समय उसे पहले से ही मेजबान से प्राप्त सभी http-कुकीज़ भेजता है।

ऐसा लगता है, यह मेरी ब्लूप्रिंट फ़ाइल द्वारा उत्पन्न परीक्षण चलाते समय ड्रेड द्वारा नहीं किया जाता है। और इस वजह से उपयोगकर्ता को लॉग इन करने की आवश्यकता वाले किसी भी अनुरोध के लिए परीक्षण के लिए सही तरीके से काम नहीं करते हैं।

क्या इन http-कुकीज़ को प्रबंधित करने के लिए Dredd को मजबूर करने के लिए अनुरोध को "इस अनुरोध को चलाने से पहले होने की आवश्यकता है" के रूप में अनुरोध करने की संभावना है?

बीटीडब्ल्यू, आरईएसटी सेवा Sails.js में लागू की गई है, node.js के लिए एक एमवीसी-फ्रेमवर्क।

उत्तर

0

ड्रेडड को चलाने के लिए और परीक्षण पर्यावरण सेटअप के विरुद्ध है। परीक्षण फिक्स्चर के साथ एक सीआई उपकरण में। इसे उत्पादन वातावरण में नहीं चलाया जाना चाहिए।

ऐसा कहा जा रहा है कि अंततः परीक्षण के दौरान इसे सेटअप या टियरडाउन क्रियाएं करने के लिए कभी-कभी आवश्यकता हो सकती है। अंततः test scenarios की पेशकश करने की योजना बनाई गई है।

क्या आपको सेटअप/टियरडाउन कार्यक्षमता की आवश्यकता है, जिसे आप here पर चर्चा के रूप में ड्रेड "हुक" का उपयोग कर सकते हैं।

1

यह पुरानी है, लेकिन मैं सिर्फ एक ही मुद्दे में भाग गया और ड्रेड डॉक्स काफी पुराने हो चुके हैं, इसलिए बाद से मैं यह पता लगा यह मदद मिल सकती है (कि विडंबना ?! नहीं है) किसी को :)

आप hooks का उपयोग करके प्रतिक्रिया को पढ़ और ओवरराइट कर सकते हैं और बॉडी और हेडर का अनुरोध कर सकते हैं (यह विषय पर पाया जाने वाला सबसे अद्यतित पृष्ठ है लेकिन अभी भी समस्याएं और टाइपो हैं)। एक चेतावनी यह है कि ड्रेड में कुकीज़ के लिए सहायक नहीं लगते हैं, इसलिए आपको स्वयं को कुकी हेडर का विश्लेषण करना और बनाना है।

मेरे मामले में sessionId जेसन बॉडी के साथ-साथ एक कुकी के रूप में वापस आ गया है: मैंने शरीर को पार्स किया है क्योंकि यह आसान है लेकिन यदि आवश्यक हो तो आप प्रतिक्रिया कुकी से सत्र को बहुत अच्छी तरह से पुनर्प्राप्त कर सकते हैं। ,

hooks = require('hooks'); 
stash = {} 

// hook to retrieve session on a login 
hooks.after('Auth > /remoteauth/userpass > POST', function(transaction){ 
    stash['token'] = JSON.parse(transaction.real.body)['sessionId']; 
}); 

// hook to set the session cookie in all following requests 
hooks.beforeEach(function(transaction){ 
    if(stash['token'] != undefined){ 
    transaction.request['headers']['Cookie'] = "id=" + stash['token'] 
    }; 
}); 

The docs कैसे हुक स्थापित करने के लिए समझाने हालांकि एक बात है कि मेरे फिसल गया है कि dredd --names आदेश अगर आप में एक dredd.yml फ़ाइल है काम नहीं करता है: यहाँ मोटे तौर पर हुक मैं प्रमाणन काम करने के लिए लिखा है एक ही निर्देशिका (फ़ाइल की उपस्थिति की तरह लगता है कि सभी कमांड लाइन तर्कों को अनदेखा करता है)।

संबंधित मुद्दे