2010-05-26 19 views
17

मैं यह कहने के लिए एक परीक्षण कैसे लिख सकता हूं कि कार्रवाई new प्रस्तुत की गई है?रेल परीक्षण: कार्रवाई प्रस्तुत करें

def method 
    ... 
    render :action => :new 
end 

मैं नीचे लाइनों की तरह कुछ के लिए देख रहा हूँ, लेकिन बात पर जोर देना है कि कार्रवाई, बुलाया गया था नहीं टेम्पलेट: मैं जानता हूँ कि मैं ऐसा नहीं कर सकते

assert_equal layout, @response.layout 
assert_equal format, @request.format 

@response.action

अग्रिम में धन्यवाद!

देब

उत्तर

0

दृश्य गाया किया जाएगा, कार्रवाई कहा जाता है। इस प्रयास करें:

@controller.expects(:new) 
+0

इस परीक्षण है कि कार्रवाई विधि बुला लिया गया। एक क्रिया किसी भी दृश्य को प्रस्तुत या यहां तक ​​कि रीडायरेक्ट भी प्रस्तुत कर सकती है। – jwadsack

8

मान लीजिए कि आप, बनाने के लिए एक नियंत्रक कार्रवाई की है इस प्रकार है:

def create 
    @post = Post.new(params[:post]) 

    respond_to do |format| 
    if @post.save 
     format.html { redirect_to(@post, :notice => 'Post was successfully created.') } 
     format.xml { render :xml => @post, :status => :created, :location => @post } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @post.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

और यहाँ है मानक मचान 'पदों # नए' दृश्य

<h1>New post</h1> 

<% form_for(@post) do |f| %> 
<%= f.error_messages %> 
...... # just to show, it's bigger.... 

अब, यदि कोई पोस्ट सफलतापूर्वक बनाया गया है तो आप रीडायरेक्ट करना चाहते हैं, लेकिन अगर यह विफल हो जाता है, तो हम केवल नई कार्रवाई को फिर से प्रस्तुत करना चाहते हैं। नीचे दिया गया परीक्षण हमारे मुख्य व्यक्ति डीजेट्रिपलट्राइट ने assert_template का उपयोग करने के लिए कहा है।

test "should not create post and instead render new" do 
    post :create, :post => { } 

    assert_template :new 
    #added to doubly verify 
    assert_tag :tag => "h1", :child => /New post/ 
    end 

है कि अभी भी अपनी नाव नाव नहीं है, तो मैं भी तो तुम्हें पता है कि यह दिखाया गया है/अंत उपयोगकर्ता के लिए प्रदान की गई है यकीन है कि दृश्य के कुछ आ रहा है बनाने के लिए, एक assert_tag जोड़ना होगा।

उम्मीद है कि इससे मदद मिलती है।

70

भविष्य लोगों की है कि इस को खोजने के लिए, सही विधि है:

assert_template :new 
4

रेल 5.0.0 के रूप में, आप परीक्षण कर सकते हैं कि कार्रवाई प्रदर्शित किया टेम्पलेट के परीक्षण से ठीक से प्रदान की गई है।

आपको सबसे पहले अपने Gemfile को rails-controller-testing मणि जोड़ने की आवश्यकता है (क्योंकि यह संस्करण 5 के बाद से रेल के बाहर निकाला गया था)। फिर, अपने परीक्षण में, बस का उपयोग करें:

assert_template :new

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