2012-07-08 15 views
5

मैं अपने रेल कौशल को बेहतर बनाने के लिए याहू उत्तर प्रकार के ऐप पर काम कर रहा हूं। दो मॉडल "प्रश्न" और "जवाब" अब तक मैं निर्धारित किया है और वे इस तरह से नेस्टेड रहते हैं:व्यू टेस्ट और नेस्टेड संसाधनों के साथ रुपेक और रेल

resources :questions do 
    resources :answers 
    end 

मैं नियंत्रकों, मॉडल और सवालों के विचारों के लिए परीक्षण कर लिया है, लेकिन मैं कर रहा हूँ उत्तर 'दृश्य और घोंसले मार्गों के साथ थोड़ा परेशानी है। मैं रुपये और फैक्टरी लड़की का उपयोग कर रहा हूँ।

मैं निम्नलिखित परीक्षण है:

describe "answers/new.html.erb" do 
    before(:each) do 
    @question = Factory(:valid_question) 
    @answer = Factory(:valid_answer) 
    assign(:question, @question) 
    assign(:answer, stub_model(Answer, 
     :text => "MyString", 
     :question_id => 1 
    ).as_new_record) 
    end 

    it "renders new answer form" do 
    render 
    assert_select "form", :action => question_answers_path(@question), :method => "post" do 
     assert_select "textarea#answer_text", :name => "answer[text]" 
     assert_select "input#answer_question_id", :name => "answer[question_id]" 
    end 
    end 
end 

और जब भी मैं परीक्षण मैं निम्न संदेश प्राप्त चलाएँ:

3) answers/new.html.erb renders new answer form 
    Failure/Error: render 
    ActionView::Template::Error: 
     No route matches {:controller=>"answers"} 
    # ./app/views/answers/new.html.erb:6:in `_app_views_answers_new_html_erb__3175854877830910784_6513500' 
    # ./spec/views/answers/new.html.erb_spec.rb:16:in `block (2 levels) in <top (required)>' 

मैं

render new_question_answer_path(@question) 
कर की तरह बहुत सी बातें की कोशिश की है

लेकिन मुझे यह मिलता है:

3) answers/new.html.erb renders new answer form 
    Failure/Error: render new_question_answer_path(@question.id)#, :format=>:html 
    ActionView::MissingTemplate: 
     Missing partial /questions/1/answers/new with {:handlers=>[:erb, :builder, :coffee], :formats=>[:html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, : 
url_encoded_form, :json], :locale=>[:en, :en]}. Searched in: 
     * "/home/juan/rails_projects/answers/app/views" 
    # ./spec/views/answers/new.html.erb_spec.rb:16:in `block (2 levels) in <top (required)>' 

क्या आप कृपया इसके साथ मेरी मदद करेंगे? मैं अभी अनजान हूं।

उत्तर

8

मुझे लगता है कि त्रुटि आपके विचार में है। क्या आप इसे जोड़ सकते हैं?

इसके अलावा, यहां RSpec के प्रयोग पर कुछ सलाह है:

  • आप एक लेट ब्लॉक में @question और @answer दोनों डाल सकता है। इन दिनों इसे करने का यह पसंदीदा तरीका है। दस्तावेज़ों को देखें, यह उपयोग करने के लिए काफी सरल है।
  • आपको वास्तव में FactoryGirl.create का उपयोग करना चाहिए, Factory() नहीं। यदि आप अपने आरएसपीसी कॉन्फ़िगरेशन में Factory::Syntax::Methods शामिल करते हैं तो आप इसे create पर छोटा कर सकते हैं।
  • वास्तविक मॉडल के साथ परीक्षण युगल मिश्रण करना आम तौर पर अच्छा विचार नहीं है। आपको या तो मॉडल से विचारों को अलग करना चाहिए या उन्हें सभी तरह से एकीकृत करना चाहिए - या तो stub_model को Answer.build के साथ प्रतिस्थापित करें या @question और @answer के लिए स्टब का उपयोग करें। फैक्टरीगर्ल में Factory.build_stubbed है जो मूल रूप से stub_model देखने के लिए उपयुक्त चश्मा है।
  • देखें चश्मे कृपा से गिर गए हैं। मैं सुझाव देता हूं कि क्यों लोग उनसे बचने के लिए चुनते हैं, इस बारे में विवरण के लिए आरएसपीसी मेलिंग सूची खोजना। मेरा लेना यह है कि मॉडल और हेल्पर्स पर उनकी निर्भरताओं के कारण वे काफी नाजुक (कोड बदलने पर तोड़ने में आसान) हैं। या तो वे आपको बहुत कुछ रोकने, मॉडलों को एकीकृत करने, या एक साधारण प्रस्तुति लिखने के लिए मजबूर करते हैं। कहा जा रहा है कि उनके पास उपयोग हैं, लेकिन वे दुर्लभ हैं। एक बेहतर विकल्प एकीकरण में इस बातचीत का परीक्षण करना होगा, या तो ककड़ी, स्टेक या बस आरएसपीईसी और कैपिबरा का उपयोग करना।
  • आपके दावे उन चीजों के उदाहरण हैं जिन्हें आप आम तौर पर एक दृश्य कल्पना में परीक्षण नहीं करना चाहते हैं। आप फॉर्म फ़ील्ड समेत कुछ मार्कअप की उपस्थिति पर जोर दे रहे हैं, जो कि एक अच्छा परीक्षण नहीं है, क्योंकि यह आपको बताता है कि फॉर्म वहां है, लेकिन यह नहीं कि यह काम कर रहा है। आपको एकीकरण में बेहतर कवरेज मिलेगा। इसके अलावा, यह कम नाजुक होगा - यदि आप मॉडल या फ़ील्ड का नाम बदलते हैं, उदाहरण के लिए, आपको दृश्य spec को बदलने की आवश्यकता नहीं होगी।
2

मैं इस मुद्दे में भाग गया। यदि आप स्टैक ट्रेस को बारीकी से देखते हैं, तो आप देखेंगे कि आपका दृश्य सही ढंग से कॉल हो रहा है, लेकिन लाइन 6 पर कोई त्रुटि है।

मेरे मामले में, यह रेलवे पथ में से किसी एक को कॉल के कारण होता है, answers_path(@question) जैसे कुछ, लेकिन यह शून्य हो रहा था।

फिक्स उस आवृत्ति चर के लिए assign कॉल जोड़ने के लिए है। यदि इसके बजाय स्थानीय चर का उपयोग किया जाता है, तो render पर कॉल करते समय इसे :locals हैश के माध्यम से पारित किया जा सकता है।

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