2009-10-09 14 views
10

में 'puts' की अनुपस्थिति (अनुपस्थिति) की जांच करें, मैं रूबी प्रोजेक्ट में अपने परीक्षण के लिए rspec का उपयोग कर रहा हूं, और मैं यह अनुमान लगाता हूं कि -q विकल्प का उपयोग होने पर मेरे प्रोग्राम को कुछ भी आउटपुट नहीं करना चाहिए। मैंने कोशिश की:आरएसपीसी

Kernel.should_not_receive :puts 

कंसोल पर आउटपुट होने पर असफल परीक्षण नहीं हुआ।

मैं टेक्स्ट आउटपुट की अनुपस्थितियों को कैसे सत्यापित करूं?

उत्तर

15

डालता है आंतरिक रूप से $ stdout का उपयोग करता है। जिस तरह से यह काम करता है, इसका उपयोग करने का सबसे आसान तरीका केवल उपयोग करना है: $stdout.should_not_receive(:write)

जो चेक की अपेक्षा के अनुसार कुछ भी नहीं लिखा गया है। कर्नेल.पूट (ऊपर के रूप में) केवल एक असफल परीक्षण के परिणामस्वरूप होगा जब को इस तरह के रूप में जाना जाता है (उदा। कर्नल.पूट "कुछ टेक्स्ट"), जहां अधिकांश मामलों में यह वर्तमान ऑब्जेक्ट के दायरे में कॉल करता है।

4

ऊपर स्वीकृत उत्तर गलत है। यह "काम करता है" क्योंकि यह प्राप्त नहीं होता है: संदेश लिखें लेकिन इसे प्राप्त हो सकता है: संदेश डालता है।

सही लाइन पढ़ना चाहिए:

$stdout.should_not_receive(:puts) 

इसके अलावा क्या आप वाकई से पहले कोड कि stdio को लिखेंगे लाइन डाल करने की जरूरत है। उदाहरण के लिए:

it "should print a copyright message" do 
    $stdout.should_receive(:puts).with(/copyright/i) 
    app = ApplicationController.new(%w[project_name]) 
end 


it "should not print an error message" do 
    $stdout.should_not_receive(:puts).with(/error/i) 
    app = ApplicationController.new(%w[project_name]) 
end 

है यही कारण है कि एक वास्तविक एक परियोजना

+0

मेरे लिए से काम कर RSpec, उम्मीद: काम करता है लिखते हैं, लेकिन उम्मीद: कहते हैं नहीं करता है। क्या आपका कोड $ stdout.puts को कॉल करता है या बस रखता है? –

+0

बस रखता है, मैं $ stdout को कभी नहीं लिखूंगा क्योंकि यह बहुत गतिशील नहीं है। इसके बजाय मैं $ stdout को एक स्ट्रिंगियो की तरह फिर से सौंपूंगा, इसलिए "रखता है" जो मैं चाहता हूं उसे जाता है। ध्यान रखें कि आप उम्मीद नहीं कर रहे हैं: लिखो कि आप लिखने की उम्मीद नहीं कर रहे हैं। रखता है के साथ वही बात। मैं यह देखने के लिए परीक्षण करता हूं कि सकारात्मक परीक्षा के साथ-साथ नकारात्मक परीक्षण करके आप क्या प्राप्त कर रहे हैं। उदाहरण के लिए यदि मैं कहता हूं "मुझे दिन देने वाले धर्मनिरपेक्ष उपहार के लिए टोपी नहीं मिलनी चाहिए।" इसका मतलब यह नहीं है कि मुझे स्कार्फ नहीं मिला। –