2011-10-21 17 views
15

मैं एक रेल एकीकरण की परीक्षा में एक ही यूआरएल के दो अनुरोध बनाने समस्या आ रही है rspecरेल एकीकरण चश्मा में

it 'does something' do 

    # get '/something', {:status=>'any_other'}, @header ## <<<<< this line couses problem! 

    get '/something', {:status=>'ok'}, @header 
    doc = Nokogiri::HTML(response.body) 
    lis = doc.css('#the_id') 
    lis.size.should == 1 
    lis[0].text.should include('anything') 
end 

साथ अगर मैं एक ही नियंत्रक करने के लिए दो अनुरोध करने में एक ही नियंत्रक के दो अनुरोध बनाने, , परीक्षण ... पुराने प्रतिक्रिया बनाए रखने के लिए लगता है

उपरोक्त उदाहरण में, यदि मैं उस लाइन uncomment, यह beacause परीक्षण टूटता पहले 'जिज्ञासा'

यह की एक सीमा है का परिणाम का कहना है परीक्षण ढेर, या मैं कुछ गलत कर रहा हूँ?

उत्तर

1

रेल एकीकरण परीक्षण लिखा जाना चाहिए ताकि मामले में एक ही अनुरोध - प्रतिक्रिया चक्र का परीक्षण किया जा सके। हम रीडायरेक्ट की जांच कर सकते हैं। लेकिन आप '/ कुछ' की तरह

प्राप्त कुछ करने के लिए है, तो {: स्थिति => 'any_other'}, @header

प्राप्त '/ कुछ', {: स्थिति => 'ठीक है'}, @header

आपको इसके लिए दो अलग-अलग मामले लिखना चाहिए।

+4

उपयोग कर रहे हैं rspec के डिजाइनरों आप एक दूसरी अनुरोध करने के लिए नहीं करना चाहते हैं, दूसरा अनुरोध को ऐसा करने से आप को रोकने के लिए एक अपवाद उठाना चाहिए। इस तरह यह एक सुविधा के रूप में आता है, एक बग नहीं। कोई विचार क्यों उन्होंने ऐसा नहीं किया? –

+1

हां, आरएसपीईसी के डिजाइनरों ने आपको सुविधा प्रदान की है। इसकी आपकी आवश्यकता है कि आप इसका परीक्षण कैसे करें (आवेदन के वास्तविक व्यवहार के अनुसार)। –

1

आरएसपीईसी के बजाय कैपिबरा का उपयोग करना (अनुरोध) एकीकरण परीक्षण के लिए एक बेहतर समाधान है। यह rspec के समान सिंटैक्स का उपयोग करता है और इसे एकल ब्लॉक में एकाधिक अनुरोधों की अनुमति देता है। मैं एकीकरण परीक्षण के लिए इकाई परीक्षण और capybara के लिए rspec का उपयोग करें।

1

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

आरएसपीसी-रेल से नियंत्रक चश्मे रेल के कार्यात्मक परीक्षणों से प्राप्त होते हैं, इसलिए उनके पास समान सीमा होती है। आप एकीकरण परीक्षण के लिए capybara या webrat (मैं पूर्व की सिफारिश) के साथ rspec का उपयोग कर सकते हैं। https://github.com/rspec/rspec-rails

0

आप अपने उदाहरण चर, या हो सकता है केवल आवश्यक एक स्पष्ट करने के लिए है:

इसके अलावा, rspec-रेल के हाल के संस्करणों "अनुरोध चश्मा" जो "रेल एकीकरण परीक्षणों की behaivour में मिश्रण" है। आइए देखें कि आप अपने नियंत्रक में @book का उपयोग करें।

get '/something' 
assert ... 
controller.instance_variable_set(:@book, nil) 
get '/something' 
assert ... 

आप inherit_resources

get '/something' 
assert ... 
controller.send(:set_resource_ivar, nil) 
get '/something' 
assert ... 
+0

यह पर्याप्त नहीं है। आरएसपीसी पुराने 'पैरा' को चारों ओर झूठ बोलता रहता है, और यदि आप अपने दूसरे अनुरोध पर नया 'पैरा' पास करते हैं, तो आपके नियंत्रक को देखे जाने वाले 'पैरा' कई बार आश्चर्यचकित हो सकते हैं। –

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