2012-02-07 1 views
9

मैंने रुपेक का उपयोग करने का प्रयास करने के लिए सोचा है। लेकिन मुझे assert_select के साथ अगली समस्या मिलती है।रेल 3 आरएसपीसी और assert_select

1) UserController login page open login page contains all expected controls 
Failure/Error: assert_select "form[action=?]", "/user/login" do MiniTest::Assertion: 
Expected at least 1 element matching "form[action='/user/login']", found 0. 
# (eval):2:in `assert' 
# ./spec/controllers/user_controller_spec.rb:20:in `block (3 levels) in <top (required)>' 

यह मेरा कोड स्निपेट

describe UserController do 
    describe "login page open" do 
    it "login page contains all expected controls" do 
     get :login 
     assert_select "form[action=?]", "/user/login" do 
     assert_select "input[name=?]", "username" 
     assert_select "input[name=?]", "password" 
     assert_select "input[type=?]", "submit" 
    end 
    end 
end 

जब मैं एक ब्राउज़र यह पेज समस्या के बिना खुलता में एक प्रवेश पृष्ठ खोलने है।

+0

जब आप आरएसपीईसी का उपयोग करते हैं तो आपके पास 'मिनीटेस्ट :: एसेशन' त्रुटि क्यों होती है? मुझे लगता है कि आपके आरएसपीईसी सेटअप में कुछ गड़बड़ है! – phoet

+0

मुझे भी लगता है। लेकिन मैंने यह सब [निर्देश] (http://rubydoc.info/gems/rspec-rails/frames) द्वारा किया था – starter

+0

आपका 'spec/spec_helper.rb' कैसा दिखता है? क्या आपने अपने spec को 'rspec' कमांड के साथ चलाने का प्रयास किया था? – phoet

उत्तर

15

डिफ़ॉल्ट रूप से, आरएसपीईसी (कम से कम नए संस्करणों में) जब आप नियंत्रक चश्मा चश्मा चलाते हैं तो रेल को दृश्य प्रस्तुत करने से रोकता है। वे चाहते हैं कि आप चश्मा देखने में अपने विचारों का परीक्षण करें, नियंत्रक चश्मा नहीं। चूंकि विचार प्रस्तुत नहीं करते हैं, assert_select हमेशा विफल रहता है।

लेकिन उन लोगों के लिए जो (मेरे जैसे) अपने नियंत्रक चश्मे में एक दृश्य के कभी-कभी स्निपेट का परीक्षण करना चाहते हैं, वे render_views विधि प्रदान करते हैं। आपको इसे अपने describe या context ब्लॉक में कॉल करना होगा, हालांकि it ब्लॉक के अंदर नहीं।

describe UserController do 

    render_views  # <== ADD THIS 

    describe "login page open" do 
    it "login page contains all expected controls" do 
     get :login 
     assert_select "form[action=?]", "/user/login" do 
     assert_select "input[name=?]", "username" 
     assert_select "input[name=?]", "password" 
     assert_select "input[type=?]", "submit" 
    end 
    end 
end 
1

नियंत्रक परीक्षण परीक्षण नियंत्रकों के लिए हैं।

assert_select आपके व्यू कोड में कुछ ऐसा मेल खाता है।

यह एक अच्छा विचार है कि आपके नियंत्रक आपके विचारों से अलग रहें, और इसमें नियंत्रकों और विचारों पर किए गए परीक्षण शामिल हैं। आपको अपने विचार परीक्षण में assert_select का उपयोग करना चाहिए (जो आमतौर पर spec/views पर हैं), आपके नियंत्रक परीक्षणों पर नहीं।