2011-01-19 15 views
41

मेरी ApplicationController में मैं एक विधि एक सहायक विधि के रूप में परिभाषित किया है:एप्लिकेशनकंट्रोलर विधि को एक सहायक विधि के रूप में परिभाषित करने का परीक्षण कैसे करें?

helper_method :some_method_here

  • कैसे मैं RSpec में ApplicationController परीक्षण करते हैं?
  • मेरे विचार/सहायकों का परीक्षण करते समय मैं इस सहायक विधि को कैसे शामिल/कॉल कर सकता हूं?

मैं Rails3 उपयोग कर रहा हूँ RSpec2

उत्तर

50

साथ आप अपने ApplicationController परीक्षण करने के लिए RSpec दस्तावेज में वर्णन के रूप में एक anonymous controller उपयोग कर सकते हैं। testing helpers पर भी एक अनुभाग है।

+0

किसी भी तरह से मैंने उस अज्ञात नियंत्रक को याद किया! धन्यवाद! – Mirko

+0

बिल्कुल मुझे क्या पता होना चाहिए! – Matthew

+2

क्या यह अभी भी Rails4 में काम कर रहा है? मुझे 'कोई मार्ग मिलान नहीं है {: नियंत्रक => "अज्ञात", क्रिया => "कुछ क्रिया"} '.. – chrmod

21

आप विनिर्देश में subject या @controller पर अपने सहायक तरीकों का आह्वान कर सकते हैं।

मैं इस समस्या का हल ढूंढ रहा हूं और अज्ञात नियंत्रक जो मैं ढूंढ रहा था वह नहीं था।

class ApplicationController < ActionController:Base 

    def your_helper_method 
    return 'a_helpful_string' 
    end 

end 

तो फिर तुम इस प्रकार spec/controllers/application_controller_spec.rb में अपने परीक्षण लिख सकते हैं::

require 'spec_helper' 

describe ApplicationController do 

    describe "#your_helper_method" do 
    it "returns a helpful string" do 
     expect(subject.your_helper_method).to eq("a_helpful_string") 
    end 
    end 

end 
जबकि @controller

और मान लीजिए कि आप एक नियंत्रक एक सरल तरीका है जिसके एक बाकी पथ के लिए बाध्य नहीं है साथ app/controllers/application_controller.rb पर रहने वाले करते हैं subject का उपयोग यहां विनिमेय किया जा सकता है, मैं अब subject के लिए आरएसपीसी बेवकूफ तरीका के रूप में जाना चाहूंगा।

+1

'' 'current_user'' 'सहायक का परीक्षण करने के लिए अपने उत्तर का उपयोग करके, और यह शानदार ढंग से काम कर रहा है –

+0

यह पैटर्न उन तरीकों के लिए भी गुजरने की अनुमति देगा जो' helper_method' तर्कों में जोड़े नहीं गए हैं। मैं 'संरक्षित' के रूप में सहायक विधियों को परिभाषित करना पसंद करता हूं और फिर 'उम्मीद (subject.send (: your_helper_method)) के साथ speccing "e_helpful_string" eq। – Epigene

+0

भेजें एक हैक है। ऐसा न करें –

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

  • कोई संबंधित समस्या नहीं^_^