2016-03-29 12 views
6

मैं उस एप्लिकेशन के लिए नियंत्रक परीक्षण लिख रहा हूं जिसे मैंने नहीं बनाया है, इसलिए यह निश्चित रूप से एक सीखने की प्रक्रिया है। यह मेरा पहला समय है जो एक नियंत्रक का सामना कर रहा है जो सीधे नियंत्रक नियंत्रक :: बेस से प्राप्त होता है। यह स्पष्ट रूप से, अन्य नियंत्रकों के समान व्यवहार नहीं करता है।रेल में आरईपीसी नियंत्रक परीक्षण एक नियंत्रक जो कि नियंत्रक नियंत्रक से प्राप्त होता है :: बेस

इसका प्रारूप मोटे तौर पर है:

class SchwadGenericController < AbstractController::Base 
    def schwad_method var_one, var_two = nil, var_three = nil 

    if var_two.blank? 
     var_one.generic_method 
    end 

    render template: "schwad_templates/generic_template", layout: false 
    end 
end 

मैं सामान्य परीक्षण की कोशिश की, यह वह जगह है जहाँ मैं कुछ भी होने के लिए प्राप्त करने पर वर्तमान में कर रहा हूँ।

require 'rails_helper' 

describe SchwadGenericController do 
    # before(:each) do 
    #  SchwadGenericController.skip_authorize_resource 
    # end 
    # login_user 
    let!(:variable){ create(:my_factory_variable) } 


    describe 'controller methods' do 

    it 'should hit this method' do 
     binding.pry 
     SchwadGenericController.schwad_method(variable) 
     # expect(response).to_render template: "schwad_templates/generic_template" 
    end 
    end 
end 

और यहां लगभग मोटे तौर पर मेरी विफलताओं लैंडिंग हैं।

Failures: 

    1) SchwadGenericController controller methods should hit this method 
     Failure/Error: Unable to find matching line from backtrace 
    NoMethodError: 
     undefined method `request=' for # <SchwadGenericController:0x007f8022db0a20> 

मैं सार नियंत्रकों पर पढ़ सकते हैं और यहां रेल में उनकी भूमिका: https://www.mobomo.com/2012/06/and-you-thought-render-farms-were-just-for-pixar/

मैं यहाँ डॉक्स पर पढ़ें: http://api.rubyonrails.org/classes/AbstractController/Base.html

मैं इस और मार्गदर्शन पर आंखों का एक और सेट वास्तव में सराहना करेंगे इस तरह के लोगों ने नियंत्रक और उनके तरीकों का परीक्षण किया है, नियंत्रक के साथ जो सार नियंत्रक :: आधार से विरासत में हैं .... मुझे क्या याद आ रही है?

-Schwad

उत्तर

2

कुछ परीक्षणों के बाद, मुझे नहीं लगता कि यह संभव है। नियंत्रक चश्मे सिर्फ wrappers for Rails functional tests हैं जो ActionController::Base से उत्तराधिकारी कक्षाओं का परीक्षण करते हैं। नियंत्रक परीक्षणों को भी चलाने के लिए, नियंत्रक को request और response ऑब्जेक्ट्स का समर्थन करना चाहिए, जो AbstractController::Base का मामला नहीं है (ActionController::Base में हैं)। यही कारण है कि जब आप परीक्षण चलाते हैं तो आपको विशेष त्रुटि मिलती है। इसी कारण से, आप to_render जैसे नियंत्रक spec helpers (अपेक्षाओं) का उपयोग करने में सक्षम नहीं होंगे क्योंकि, फिर से, वे केवल नियंत्रक चश्मे के लिए परिभाषित किए जाते हैं और आपका नियंत्रक वर्ग "नियंत्रक चश्मा" अर्थ में "नियंत्रक" नहीं है ।

परीक्षण के लिए आपको लगता है कि एकमात्र विकल्प नियंत्रक का परीक्षण किसी अन्य सादे रूबी वर्ग के रूप में करता है। आपको अपने परीक्षण को spec/controllers निर्देशिका से दूसरे स्थान पर ले जाने की आवश्यकता होगी, उदा। spec/abstract_controllers और फिर आप सब नियंत्रक कल्पना सहायकों और परीक्षण सिर्फ उदाहरण के तरीकों, जैसे बुला छोड़ देना होगा:

describe 'controller methods' do 
    it 'should hit this method' do 
    c = SchwadGenericController.new 
    expect(c).to receive(:render).with(template: "schwad_templates/generic_template", layout: false) 
    c.schwad_method(variable) 
    end 
end 
+0

धन्यवाद। इस तरह से चलेंगे और वापस रिपोर्ट करेंगे। – Schwad

1

AbstractController :: बेस से सीधे विस्तार मेरे लिए त्रुटि के संभावित स्रोत रहा है। जब तक आप कुछ अपरंपरागत नहीं कर रहे हैं, तब तक ऐसा करने का कोई कारण नहीं होना चाहिए।

क्या आप वाकई एक्शनकंट्रोलर :: बेस से उत्तराधिकारी का इरादा नहीं रखते हैं? एक्शन कंट्रोलर में मॉड्यूल का पूरा समूह है जो प्रतिपादन के लिए जरूरी है जो शायद आपके परीक्षणों में लापता विधि पर त्रुटि बताता है।

यदि एक्शनकंट्रोलर पर स्विच करना :: बेस काम नहीं करता है। रेल कंसोल से app.get "/path/to/action" चलाने का प्रयास करें। क्या आपको वही त्रुटि मिलती है?

+0

यह अच्छी तरह से हो सकता है, वर्ग काम करता है इरादा के रूप में, मैं पढ़ने में परीक्षण लेखन पर काम कर रहा हूँ केवल दृष्टिकोण, तो मैं आवश्यकतानुसार कोड और परीक्षणों को दोबारा कर सकता हूं। – Schwad

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