2011-03-17 15 views
12

मैं रैक :: टेस्ट का उपयोग कर अपने सिनात्रा एप्लिकेशन के लिए आरएसपीसी परीक्षण लिखने की कोशिश कर रहा हूं। मैं समझ नहीं पा रहा हूं कि मैं कुकीज़ का उपयोग कैसे कर सकता हूं। उदाहरण के लिए यदि मेरा एप्लिकेशन कुकीज़ सेट करता है (सत्र के माध्यम से नहीं) मैं कैसे जांच सकता हूं कि कुकी ठीक से सेट है या नहीं?रैक के साथ कुकीज़ का उपयोग :: टेस्ट

इसके अलावा, मैं उस कुकी के साथ अनुरोध कैसे भेज सकता हूं?

उत्तर

16

रैक :: टेस्ट एक कुकी जार रखता है जो अनुरोधों पर बनी रहती है। आप इसे rack_mock_session.cookies के साथ एक्सेस कर सकते हैं।

it 'defines a cookie' do 
    get '/' 
    rack_mock_session.cookie_jar["foo"].should == "bar" 
end 

तुम भी last_request.cookies साथ कुकी तक पहुंच सकता है, लेकिन जैसा कि नाम से कहते हैं, यह शामिल हैं:

get '/cookie/set' do 
    response.set_cookie "foo", :value => "bar" 
end 

अब आप यह कुछ इस तरह से परीक्षण कर सकते हैं: मान लीजिए कि आप इस तरह की एक हैंडलर करते हैं अंतिम अनुरोध के लिए कुकीज़, प्रतिक्रिया नहीं। आप set_cookie के साथ कुकीज़ सेट कर सकते हैं और उन्हें clear_cookies से साफ़ कर सकते हैं।

it 'shows how to set a cookie' do 
    clear_cookies   
    set_cookie "foo=quux" 
    get '/' 
    last_request.cookies.should == {"foo" => "quux"} 
end 

अद्यतन: आप कुकी जार परीक्षण मामलों (it ब्लॉक) में कायम रखना चाहते हैं, तो आप किसी भी परीक्षण के मामले निष्पादित करने से पहले रैक सत्र प्रारंभ करने की जरूरत है। ऐसा करने के लिए, अपने हुक को अपने describe ब्लॉक में जोड़ें।

before :all do 
    clear_cookies 
end 

वैकल्पिक, आप उदाहरण के लिए प्रत्येक अनुरोध से पहले आवश्यक कुकी स्थापित करने के लिए before :each इस्तेमाल कर सकते हैं।

+0

ठीक है, अब मुझे लगता है कि कुकी ठीक से सेट है, लेकिन जब मैं रूट करने का अनुरोध करता हूं जिसके लिए वैध कुकी की आवश्यकता होती है - मुझे त्रुटि मिली। (यदि कुकी सेट या गलत नहीं है तो सर्वर 401 त्रुटि देता है) – Andoriyu

+0

UPD। rack_mock_session.cookie_jar ["foo"] केवल एक पोस्ट में खाली नहीं है, अगले परीक्षण पर यह खाली है। – Andoriyu

+0

यूपीडी। वैश्विक var में कुकी संग्रहीत करके चारों ओर काम किया, इसलिए प्रत्येक अनुरोध से पहले मैंने कुकी सेट की। – Andoriyu

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