2012-03-30 12 views
39

के साथ आंशिक प्रतिपादन का परीक्षण कैसे करें मैं कुछ स्थितियों के अनुसार एक विशेष आंशिक प्रतिपादन का परीक्षण करना चाहता हूं।आरएसपीसी

उदाहरण के लिए, मॉडल शो कार्रवाई दृश्य show.html.erb में मेरे पास है:

<% if condition1 %> 
<%= render :partial => "partial1" %> 
<% else %> 
<%= render :partial => "partial1" %> 
<% end %> 

मैंने कोशिश की:

response.should render_template("partial_name") 

लेकिन यह बताता है कि यह प्रदान की गई "शो" टेम्पलेट

उम्मीद < "partial1"> लेकिन < के साथ प्रतिपादन "मॉडल/शो, लेआउट/आवेदन ">

मैं क्या गलत कर रहा हूं?

+2

https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/view-specs/view-spec – apneadiving

+1

मैं करने के लिए controller_spec – Pavel

+0

'render_template' प्रतिनिधियों में परीक्षण की आवश्यकता [assert_template' में [action_controller/test_case.rb] (https: // github।कॉम/रेल/रेल/ब्लॉब/मास्टर/एक्शनपैक/lib/action_controller/test_case.rb # L67), जहां सबसे विस्तृत दस्तावेज –

उत्तर

61

इसके अलावा इस

 
response.should render_template(:partial => 'partial_name') 
+0

धन्यवाद रहता है, मैं इसे आजमाउंगा – Pavel

+9

यह काम करता है, लेकिन आपको 'render_views' निर्दिष्ट करने की आवश्यकता है यदि आप नियंत्रक चश्मे लिख रहे हैं। – Fabio

+0

क्या आप render_views चीज़ पर विस्तार कर सकते हैं? render_template मेरे लिए नियंत्रक परीक्षण में काम नहीं कर रहा है। –

-3
ऊपर उल्लेख किया समाधान आप वैकल्पिक रूप से जांच कर सकता है के बजाय

कोशिश, अगर एचटीएमएल कि आंशिक renders मौजूद है। जैसे

expect(response).to render_template(partial: 'partial_name') 
+1

के नाम पर '_' को ध्यान दें मेरे लिए 'response.body.should ...' काम करता है। –

+2

जो एक बहुत ही नाजुक परीक्षण होगा - जैसे कि यदि आप एचटीएमएल बदलते हैं तो परीक्षण विफल हो जाएगा, लेकिन आप वास्तव में परीक्षण कर रहे हैं कि टेम्पलेट प्रदान किया गया है या नहीं। – jbielick

+0

स्पेक परीक्षण प्रतिपादन आंशिक, एचटीएमएल शरीर परीक्षण नहीं करना चाहिए। – Argonus

23

नवीनतम rspec संस्करण के बजाय expect वाक्य रचना should उपयोग करने के लिए सुझाव है ध्यान दें कि हमें रिपोर्ट किए गए render_views की आवश्यकता है nto documentation

expect(response).to render_template(partial: '_new_customer') 

आप प्रारंभिक अंडरस्कोर के साथ आंशिक के नाम उपलब्ध कराने की आवश्यकता:

और इस लाइन है कि अगर "_new_customer" आंशिक प्रदान की गई है का परीक्षण होगा।

यह भी सावधान रहें क्योंकि आपके कोड में आईएफ और ईएलएसई कथन एक ही चीज़ प्रस्तुत कर रहे हैं।

2

आप एक नियंत्रक अंदर इस परीक्षण कर रहे हैं आप इस तरह कुछ करना चाहिए:

RSpec.describe Users::RegistrationsController, type: :controller do 
    describe "GET #new" do 
    render_views 

    it "render customer partial" do 
     get :new 
     expect(response).to render_template :new 
     expect(response).to render_template(partial: '_new_customer') 
    end 
    end 
end 

response.body.should have_tag("div#foo") 
+0

क्या आप वास्तव में नियंत्रक spec में एक दृश्य का परीक्षण करना चाहिए? आरएसपीसी इस के लिए spec/विचार प्रदान करता है; या आप सुविधा/एकीकरण परीक्षण का उपयोग कर सकते हैं। –

+0

@ क्रिसशैरा अच्छी तरह से, आपको दोनों की आवश्यकता हो सकती है। एक नियंत्रक spec में आप परीक्षण कर सकते हैं कि नियंत्रक अपेक्षित टेम्पलेट/दृश्य प्रस्तुत करने जा रहा है। फिर फीचर/एकीकरण परीक्षण में आप पूरे फ्लो का गहराई से परीक्षण कर सकते हैं, विशेष रूप से यह देखने के लिए कि उपयोगकर्ता अपेक्षित कार्यों को करने में सक्षम है या नहीं। –

0

हैं का उपयोग कर rspec नियंत्रकों

expect(response).to render_template(partial: 'home/_sector_performance') 
0

में रेल 5.1, this kind of test is discouraged and you should test the controller and the view as a whole से शुरू।

नियंत्रित करके कौन सा आंशिक प्रदान किया जाता है यह जांचना कार्यान्वयन विवरण का हिस्सा है जिसे आप परीक्षण नहीं करना चाहिए।

इसलिए मैं आपको एक अनुरोध परीक्षा लिखने का सुझाव देता हूं और जांच करता हूं कि आपके आंशिक का कुछ प्रासंगिक पाठ प्रतिक्रिया निकाय में मौजूद है।

get root_path 
expect(CGI.unescape_html(response.body)).to include('Hello World')