2010-01-03 11 views
20

पर रूबी के साथ सहायक के लिए एक नमूना लिखना मैं नियंत्रकों और मॉडलों के लिए चश्मा लिख ​​रहा हूं, लेकिन मैंने कभी एक सहायक नमूना नहीं लिखा है। मुझे नहीं पता कि मैं कहां से शुरू करूं।रूबी और आरएसपीसी

मैं application_helper.rb

def title(page_title) 
    content_for(:title) { page_title } 
    end 
  • में निम्नलिखित स्निपेट कैसे मैं कोड पर एक सहायक कल्पना लिखना चाहिए है?
  • यदि अच्छा सहायक परीक्षण/गति दिखाने के लिए कोई ओपन-सोर्स रेल ऐप भी है, तो मुझे बताएं।

उत्तर

6

RSpec स्वचालित रूप से अपने रेल पर्यावरण जब आप उन्हें 'का वर्णन' से वर्गों और मॉड्यूल लोड करना चाहिए, तो एक वैध सहायक कल्पना हो सकता है:

#deleted 

लेकिन याद रखें BDD हर एक विधि का परीक्षण नहीं किया गया है कि लेकिन आपके आवेदन का व्यवहार।

संपादित करें:

रूप @Ken ने कहा, मेरी कल्पना सही नहीं था, यह निश्चित रूप से यह करने के लिए गलत तरीके से किया गया था। तो मैं एक अनुरोध spec समाधान के साथ बाहर आया कि मुझे एक सहायक नमूना से अधिक पसंद है।

# inside your helper 
def title=(page_title) 
    content_for(:title) { page_title } 
end 

# views/resource/index.html.erb 
<% title = "foo" %> 

# views/layouts/application.html.erb 
<%= yield :title %> 

# request spec 
require 'spec_helper' 

describe YourResource do 
    it "should output content for title" 
    get "/resource" 
    response.body.should =~ /<title>foo<\/title>/ 
    end 
end 

अन्यथा, आप केवल सहायक व्यवहार का परीक्षण करने के लिए (क्योंकि यह महत्वपूर्ण है या क्योंकि आप किसी भी विचारों की जरूरत नहीं है) @ केन के समाधान के लिए बेहतर है चाहते हैं।

+0

धन्यवाद आपके उदाहरण के लिए इतना। सही बीडीडी हर विधि को कवर करने के बारे में नहीं है। अधिकांश सहायक विधियों को ककड़ी/आरसीओवी कवरेज से छुआ जाता है। –

+4

यह सामग्री का परीक्षण करने के बाद से अधिक परीक्षण नहीं करता है। आपको एक पृष्ठ प्रस्तुत करना चाहिए और "शीर्षक" का चयन करना चाहिए जिसमें आप उम्मीद करते हैं। –

+1

यह एक सहायक का परीक्षण नहीं कर रहा है, यह आपके उदाहरण के आधार पर कुछ और परीक्षण कर रहा है, ऐसा लगता है कि यह एक दृश्य फ़ाइल (उदा। Index.html.erb) का परीक्षण कर रहा है। सहायक परीक्षण को केवल एक दृश्य या मार्ग/नियंत्रक पर निर्भरता के बिना, एप्लीकेशनहेल्पर # शीर्षक विधि का परीक्षण करना चाहिए। – Percy

10

यह भी संभव है के रूप में इस परीक्षण वर्ग के अंदर अपने सहायक शामिल करने के लिए:

describe ApplicationHelper do 
    helper ApplicationHelper 

    it "should work" do 
    my_helper_method("xyz").should == "result for xyz" 
    end 
end 

3.

9

यह संभव है जब सहायकों

spec'ing this syntax उपयोग करने के लिए रेल के साथ मेरे लिए काम किया

मान लीजिए यह अपने सहायक

module ApplicationHelper 
    def page_title 
    @title || nil 
    end 
end 

तो है आप इस वाक्य रचना

require "spec_helper" 

describe ApplicationHelper do 
    describe "#page_title" do 
    it "returns the instance variable" do 
     assign(:title, "My Title") 
     helper.page_title.should eql("My Title") 
    end 
    end 
end 
17

rspec-rails docs on Helper Specs से साथ यह विशिष्ट जानकारी कर सकते हैं:

हेल्पर चश्मा कल्पना/सहायकों में रहते हैं, और ActionView :: testcase :: व्यवहार में मिला दें।

एक सहायक ऑब्जेक्ट प्रदान करता है जो हेल्पर मॉड्यूल में spec'd के साथ अनुप्रयोगहेल्पर (यदि मौजूद है) प्रदान करता है। नियमित अभिव्यक्ति के साथ

require 'spec_helper' 
describe ApplicationHelper do 
    describe "#title" do 
    it "displays the title" do 
     # helper is an instance of ActionView::Base configured with the 
     # ApplicationHelper and all of Rails' built-in helpers 
     expect(helper.title).to match /Some Title/ 
    end 
    end 
end 
+0

यह जवाब होना चाहिए, * धन्यवाद * –

1

पार्स एचटीएमएल वास्तव में पहिया पुनर्रचना है। इस तरह मेरे लिए बहुत अधिक काम है: बहुत लचीला, और बहुत त्रुटि प्रवण। (तर्क के बारे में sarcastic but hilarious and accurate SO answer देखें)

यदि आपको अपने सहायकों द्वारा एचटीएमएल आउटपुट को पार्स करने की आवश्यकता है, तो आप मणि rspec-html-matchers की कोशिश कर सकते हैं। Webrat के विपरीत, यह RSpec 3 के साथ अच्छी तरह से खेलना प्रतीत होता है।

तो आप कर सकते हैं:

expect(helper.title).to have_tag('title', text: 'What you expect')