2009-07-25 17 views
6

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

उत्तर

7

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

आपको कर्ल (http://curl.haxx.se) या कर्व (रूबीफोर्ज पर, जो कर्ल के लिए रूबी बाइंडिंग्स), या संरक्षक (रूबीफोर्ज पर) की आवश्यकता है।

ये पुस्तकालय आपकी पसंद के अनुसार अनुरोध हेडर बना सकते हैं (उदाहरण के लिए सामग्री-प्रकार सेट करना, पोस्ट हटाएं हेड इत्यादि के बीच चयन करना) और प्रतिक्रिया प्राप्त करें, और संभवतः 302 पुनर्निर्देशन का पालन करें।

प्रतिक्रिया लौटा दी गई है, फिर एक्सएमएल ऑब्जेक्ट में बदल दी जा सकती है, और रूबी के लिए उपलब्ध एक्सएमएल पार्सर्स का उपयोग आउटपुट का परीक्षण करने के लिए किया जा सकता है। इसके अलावा, आप एक्सएमएल आउटपुट को रूबी ऑब्जेक्ट्स में कनवर्ट करने और उनके गुणों का परीक्षण करने के लिए एक्सएमएलमैपिंग क्लासेस (रूबीफोर्ज पर) लिख सकते हैं। यह बहुत साफ है, आईएमएचओ।

+0

ठीक है कि यह वास्तव में उपयोगी था। मैं अपने ऐप का परीक्षण करने के लिए Curb और XMLMapping का उपयोग कर रहा हूं। यह कुछ अंतर्निहित गंदे कोड को छोड़कर बहुत अच्छा काम कर रहा है। लेकिन मुझे लगता है कि परीक्षण में मुझे कुछ गंदा कोड हो सकता है। – Waseem

2

एक बार जब आप अपना विश्वसनीय मार्ग स्थापित कर लेंगे, तो आप विभिन्न मार्गों पर जाने के लिए वेब्रैट का उपयोग करने में सक्षम होना चाहिए। फिर आप परीक्षण कर सकते हैं कि प्रत्येक मार्ग एक्सएमएल लौटाता है जो आपकी अपेक्षाओं को पूरा करता है।

यहाँ एक ब्लॉग पोस्ट का वर्णन करता है कि कैसे RSpec में XML आउटपुट का परीक्षण करने के लिए: Testing XML output

Webrat एक बिना सिर ब्राउज़र है, जो अर्थ है कि आप पर फ़ायर्फ़ॉक्स की तरह एक असली ब्राउज़र खोले बिना एक ब्राउज़र अनुकरण कर सकते हैं अपने विकास मशीन इसका अर्थ यह है कि आप बस अपने निर्धारित चरणों में "विज़िट 'उपयोगकर्ता /' जैसे कुछ टाइप कर सकते हैं और उपयोगकर्ता को अपने एप्लिकेशन तक पहुंचने का अनुकरण कर सकते हैं।

अंत में Pragmatic book on RSpec (अभी भी बीटा में), ककड़ी, वेब्रैट और आरएसपीसी का एक साथ उपयोग करने और बीडीडी के साथ अपने आवेदन विकास को चलाने के तरीके पर एक महान संसाधन है।

+0

धन्यवाद :) मैं किसी भी सामने मेरे ऐप अंत अगर मैं एक "हटाएँ" बटन एक विशेष संसाधन नष्ट करने के लिए उपलब्ध नहीं है इसका मतलब है कि जरूरत नहीं है। अब AFAIK Webrat आपको किसी विशिष्ट HTTP क्रिया (GET, POST इत्यादि) के साथ किसी विशेष यूआरएल का अनुरोध नहीं करने देता है। मुझे इस समस्या की ओर कैसे आगे बढ़ना चाहिए? मैं इसे आसानी से रुपेक के साथ कर सकता हूं लेकिन यह अब "उपयोगकर्ता कहानियां" का समर्थन नहीं करता है।यह अपने आप में एक अलग सवाल है। :) – Waseem

+0

आप एक विशिष्ट यूआरएल पर जाकर बस जीईटी विधि का अनुकरण कर सकते हैं। पुट या हटाए गए क्रियाओं को अनुकरण करने के लिए, आपको लिंक पर जाने से पहले set_hidden_field "_method", "PUT" या set_hidden_field "_method", "हटाएं" का उपयोग करने में सक्षम होना चाहिए। मैंने अभी तक यह कोशिश नहीं की है। –

+0

webrat के लिए set_hidden_field का प्रलेखन। यह कहता है "यह सत्यापित करता है कि वर्तमान पृष्ठ पर एक छुपा क्षेत्र मौजूद है और मान पैरामीटर को मान सेट करता है।" चूंकि मेरे पास मेरे ऐप के लिए कोई फ्रंट एंड नहीं है, मेरे पास इंटरैक्ट करने के लिए कोई छुपा_फील्ड या फॉर्म_फील्ड या बटन नहीं है। मुझे लगता है कि मुझे एक ऐसे तरीके की आवश्यकता है जिसके साथ मैं अलग-अलग HTTP क्रियाओं के साथ अलग-अलग आराम URL का अनुरोध कर सकूं। this जैसे कुछ लेकिन जिसे स्वचालित किया जा सकता है। – Waseem

9

visit webrat का फ़ंक्शन http_method को दूसरे पैरामीटर के रूप में स्वीकार करता है। आप निम्न ककड़ी शासन में की तरह अपने API परीक्षण कर सकते हैं:

When /^I restfully delete (?:|the)user "([^\"]*)"$/ do |login| 
    visit(path_to("user \"#{login}\" page"), :delete) 
end 
0

मुझे लगता है कि ऐसा करने के लिए कोशिश कर रहा था और restful_authentication साथ एक बड़ी समस्या में फंस (AASM, restful_auth के आंतरिक मॉडल ऐसा लगता है से एक का उपयोग) और कि समाधान में लॉग इन करने गया:

Given /^I am logged in with a new account$/ do 
    login = "test" 
    @current_user = User.new(
    :login => login, 
    :password => 'generic', 
    :password_confirmation => 'generic', 
    :email => "#{login}@example.com", 
    :state => "active" 
    ) 
    @current_user.save 
    x = User.find_by_login(login) 
    x.state = "active" 
    x.save! 

    visit "/login" 
    fill_in("login", :with => login) 
    fill_in("password", :with => 'generic') 
    click_button 
    response.body.should =~ /Logged in successfully/m 
end 

क्लीनर परीक्षण कोष के लिए यह modularize, इस अवधारणा मैंने पाया डेमो के लिए है।

5

जैज़ ने जेसन/एक्सएमएल एपीआई के लिए परीक्षण लिखने के लिए रैक :: टेस्ट :: मेथड, जेएसओएनपाथ, नोकोगिरी इत्यादि का उपयोग करके अपने ककड़ी परीक्षण चरणों के उदाहरण साझा किए हैं, तो आप अपने कदमों के लिए और अधिक संदर्भ देना और बनाना चाहते हैं।

https://github.com/jayzes/cucumber-api-steps