2013-01-10 9 views
9

में मैं निम्नलिखित कल्पना है ...छोटा करते RestClient प्रतिक्रिया RSpec

describe "successful POST on /user/create" do 
    it "should redirect to dashboard" do 
     post '/user/create', { 
      :name => "dave", 
      :email => "[email protected]", 
      :password => "another_pass" 
     } 
     last_response.should be_redirect 
     follow_redirect! 
     last_request.url.should == 'http://example.org/dave/dashboard' 
    end 
    end 

सिनात्रा आवेदन पर पोस्ट विधि बाकी-ग्राहक का उपयोग कर एक बाहरी सेवा को फोन करेगा। मुझे किसी भी तरह से डिब्बाबंद प्रतिक्रियाओं को वापस भेजने के लिए बाकी क्लाइंट कॉल को रोकने की ज़रूरत है, इसलिए मुझे एक वास्तविक HTTP कॉल का आह्वान करने की आवश्यकता नहीं है।

मेरा आवेदन कोड है ...

post '/user/create' do 
    user_name = params[:name] 
    response = RestClient.post('http://localhost:1885/api/users/', params.to_json, :content_type => :json, :accept => :json) 
    if response.code == 200 
     redirect to "/#{user_name}/dashboard" 
    else 
     raise response.to_s 
    end 
    end 

कोई मुझे बता सकते हैं मैं कैसे इस RSpec के साथ क्या? मैंने चारों ओर गुगल किया है और कई ब्लॉग पोस्टों में आ गया है जो सतह को खरोंच करते हैं लेकिन मुझे वास्तव में जवाब नहीं मिल रहा है। मैं आरएसपीसी अवधि के लिए काफी नया हूँ।

धन्यवाद

उत्तर

15

प्रतिक्रिया आप यह कर सकते हैं के लिए एक mock का उपयोग करना। मैं अभी भी rspec और सामान्य रूप से परीक्षण करने के लिए काफी नया हूँ, लेकिन यह मेरे लिए काम किया।

describe "successful POST on /user/create" do 
    it "should redirect to dashboard" do 
    RestClient = double 
    response = double 
    response.stub(:code) { 200 } 
    RestClient.stub(:post) { response } 

    post '/user/create', { 
     :name => "dave", 
     :email => "[email protected]", 
     :password => "another_pass" 
    } 
    last_response.should be_redirect 
    follow_redirect! 
    last_request.url.should == 'http://example.org/dave/dashboard' 
    end 
end 
+0

मैं सुझाव देता हूं कि 'डबल' सेट को 'लेट' ब्लॉक में सेट करें, और 'post' को 'पहले' ब्लॉक में ले जाएं। – iain

+0

सुझाव @Iain के लिए धन्यवाद लेकिन इस सवाल से संबंधित नहीं है :) लेकिन हां, इसमें 'let (: sucessful_response) {...}' के साथ/उपयोगकर्ता/create'l ब्लॉक पर 'वर्णन' पोस्ट होना चाहिए और पहले ब्लॉक और फिर सशक्त और त्रुटि प्रतिक्रिया के लिए एक वर्णन। –

+0

धन्यवाद दोस्तों। मैं इस समाधान का उपयोग उन उपकरणों के साथ करूंगा जो मेरे पास पहले से ही किसी तीसरे पक्ष की ओर जाने के बजाय हैं और यह अच्छी तरह से काम करता है। – RobA2345

3

मैं इस तरह के कार्य के लिए एक मणि का उपयोग करने पर विचार करता हूं।

सबसे लोकप्रिय दो WebMock और VCR हैं।

+0

भी fakeweb: https://github.com/chrisk/fakeweb – zetetic

+2

लेखन के रूप में, फ़ेकवेब पर अंतिम प्रतिबद्धता 28 अगस्त 2011 थी ... –