2012-04-07 10 views
17

मैं rspec सीखने की कोशिश कर रहा हूं। मैं रेल नियंत्रक विधि का परीक्षण नहीं कर सकता। जब मैं परीक्षण में विधि को कॉल करता हूं, तो rspec बस एक अपरिभाषित विधि त्रुटि देता है। यहाँ मेरी परीक्षण उदाहरणमैं rspec का उपयोग कर नियंत्रक विधि का परीक्षण कैसे करूं?

it 'should return 99 if large' do 
    GamesController.testme(1000).should == 99 
end 

है और यहाँ त्रुटि है:

Failure/Error: GamesController.testme(1000).should == 99 
NoMethodError: 
    undefined method `testme' for GamesController:Class 

मैं GamesController में एक testme विधि है। मुझे समझ में नहीं आता कि टेस्ट कोड मेरी विधियों को क्यों नहीं देख सकता है।

किसी भी मदद की सराहना की जाती है।

+0

क्या यह एक निजी है ई विधि? – plainjimbo

उत्तर

4

आप वर्ग विधि परीक्षण करने की कोशिश, लेकिन नियंत्रक उदाहरण विधि

है आप GamesController.new.testme(1000).should == 99

या यहां तक ​​कि GamesController.new.send(:testme, 1000).should == 99 की जरूरत है, क्योंकि, जैसा कि मुझे लगता है कि, यह कार्रवाई विधि निजी या सुरक्षित है, लेकिन।

कार्रवाई तरीकों का परीक्षण कर रहे this way

+0

ठीक है। अब मैं इसे देखता हूँ। कक्षा और उदाहरण विधियों के बीच का अंतर एक सूक्ष्मता है जो मुझे बच निकला। जैसा कि आप बता सकते हैं, मैं अभी भी रूबी और रेल के लिए नया हूं। वैसे, आरएसपीसी-रेल दस्तावेज का लिंक अच्छा है। मुझे उस संसाधन से अवगत नहीं था। धन्यवाद। –

25

मुझे लगता है कि सही तरीका यह है:

describe GamesController do 
    it 'should return 99 if large' do 
    controller.testme(1000).should == 99 
    end 
end 

एक रेल नियंत्रक कल्पना में, जब आप describe में नियंत्रक वर्ग में कहें, आप controller विधि का उपयोग कर सकते हैं पाने के लिए एक उदाहरण: पी
जाहिर है, अगर testme विधि निजी है, तो आपको अभी भी controller.send :testme

+0

बहुत बहुत धन्यवाद - दस्तावेज़ों में खोजना आश्चर्यजनक रूप से कठिन है – Andy

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