2010-10-02 26 views
22

मुझे एक कार्यात्मक परीक्षण मिला है जो फिक्स्चर का उपयोग कर रहा है। मैं अपने यूनिट परीक्षणों में फिक्स्चर का भी उपयोग कर रहा हूं, लेकिन वे बिना दोष के काम करते हैं। जब कार्यात्मक परीक्षण चल रहा है, मैं एक मिल:रेल 3 में, मुझे रीसायकल के लिए NoMethodError मिल रहा है! परीक्षण के दौरान विधि

NoMethodError: undefined method 'recycle!' for #<Response:0x10346be10> /test/functional/responses_controller_test.rb:10:in 'test_testing'

मेरे कार्यात्मक परीक्षण, इस बिंदु पर, से ज्यादा कुछ नहीं कर रहे हैं एक सूचकांक कार्रवाई करने के लिए मिलता है। उदाहरण:

setup do 
    @response = responses(:one) 
end 

test "testing" do 
    get :index 
    assert true 
end 

मेरा टेस्टहेल्पर कक्षा में सभी फिक्स्चर शामिल हैं, इसलिए प्रतिक्रिया फिक्स्चर निश्चित रूप से लोड हो रहे हैं। और जैसे मैंने कहा, फिक्स्चर यूनिट परीक्षणों में पूरी तरह से ठीक काम करते हैं।

कोई विचार यह क्या हो सकता है?

उत्तर

44

बदलें

setup do 
    @response = responses(:one) 
end 

setup do 
    @myresponse = responses(:one) 
end 

करने और बंद तुम जाओ!

समस्या testcase मानता है कि @response एक "ActionDispatch :: रिस्पांस" यह मानता है लाइन 386

चारों ओर "actionpack-3.0.1/lib/action_controller/test_case.rb" में निहित है। आप इसे ओवरराइट करते हैं, यह अब "एक्शन डिस्पैच :: प्रतिक्रिया" नहीं है और टेस्टकेस विफल रहता है।

मुझे यकीन नहीं है कि यह इरादा व्यवहार है या नहीं।

वैसे भी, सुनिश्चित करें कि आप @ प्रतिक्रिया/@ अनुरोध/@ नियंत्रक/@ मार्गों को ओवरराइट नहीं करते हैं और इसे काम करना चाहिए।

+1

धन्यवाद, बस मेरे बेकन को बचाया। @request नामक चर के साथ एक समान समस्या थी। –

+0

वाह! ओपी के समान ही कोड था, और अब मेरे पास आपके समाधान के समान कोड है! @flo – Ben

2

फ़्लो का जवाब ज्यादातर सही है, लेकिन मैं अभी स्पष्ट करना चाहता था:

रेल में 3.0.x कि @request एक ActionController::TestRequest प्रकार है, जो recycle! विधि उस पर परिभाषित किया गया है होने की उम्मीद है। TestResponse, TestRequest, और TestSession है।

आप वास्तव में कुछ स्थितियों के लिए इन प्रकार की वस्तुओं को प्रारंभ या कुशल बनाना चाहते हैं। मेरे मामले में, मैं के साथ

@request = ActionController::TestRequest.new unless @request 
@request.host = "www.hostname.com" 
2

मैं सिर्फ एक समान समस्या एक चर @request नामकरण किया था साइट एक विशिष्ट डोमेन नाम होने उपहास करने के लिए की जरूरत है। मैं @_request में बदल गया और यह समस्या हल हो गई।

+0

धन्यवाद। वही @ @ प्रतिक्रिया 'के साथ सच है। – scarver2