2012-05-11 10 views
6

के साथ "पोस्ट बनाएं" का परीक्षण करना मैं रुपयेपेक के साथ "पोस्ट बनाएं" कार्रवाई का परीक्षण करने की कोशिश कर रहा हूं।रुपेक

def valid_attributes 
    { 
    :zone => Flymgr::Zone.new(:countries => Flymgr::ZoneCountry.first, 
     :name => 'USA', 
     :description => 'USA Flight', 
     :zipcodes => ''), 
    :price => '100.00', 
    :class => 'first', 

    } 
    end 

    def valid_session 
    {} 
    end 

    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:admin] 
     admin = FactoryGirl.create(:admin) 
     sign_in admin       
     end 

describe "POST create" do 
    describe "with valid params" do 
     it "creates a new Flymgr::Rule" do 
     expect { 
      post :create, {:Flymgr_rule => valid_attributes} 
     }.to change(Flymgr::Rule, :count).by(1) 
     end 

फार्म के लिए आवश्यक विशेषताओं में से एक 'क्षेत्र', यह एक ड्रॉपडाउन बॉक्स है और ड्रॉप-डाउन के लिए विकल्प एक अलग रूप के साथ बनाया जाता है: कोड इस प्रकार है। मुझे नहीं पता कि रुपयेपेक का उपयोग करके फॉर्म एंट्री कैसे बनाएं। जैसा कि आप देख सकते हैं, मैंने एक अलग नियंत्रक Flymgr::Zone.new से एक विधि कॉल करने का प्रयास किया है। मुझे नहीं लगता कि यह काम कर रहा है और यह मेरा परीक्षण तोड़ रहा है।

क्या कोई इसे करने का सबसे अच्छा तरीका सुझा सकता है? शायद मुझे ज़ोन और नियम प्रविष्टि बनाने के लिए फैक्टरीगर्ल का उपयोग करना चाहिए?

उत्तर

5

आपके अनुरोध पैरामीटर हैश के पास ऑब्जेक्ट का मान है: ज़ोन, जब आप इसे पोस्ट करते हैं तो बस 'to_s'-ed' होगा, जो आप चाहते हैं कि यह संभव नहीं है।

सामान्य श्रेष्ठ व्यवहार में कारखाना महिला उपयोग करने के लिए अपने वस्तुओं का निर्माण और पोस्ट अनुरोध के लिए उसके गुण parameterize करने के लिए attributes_for रणनीति का उपयोग करने के लिए है: What is the proper way to test 'create' controller actions?

आपका प्रश्न का सुझाव दे रहा है कि संघ ताकि आप एक belong_to है बस एक आईडी पोस्ट करने की जरूरत है। ध्यान रखें कि वर्तमान में, फैक्टरीगर्ल संघों के लिए कोई विशेष उत्पाद नहीं बनाता है। शासन के लिए अपने कारखाने परिभाषा क्षेत्र संघ का ख्याल रखता है, तो आप इस तरीके का उपयोग कर सकते हैं:

FactoryGirl.build(:flymgr_rule).attributes 

भी तो आप अवांछित पैरामीटर बाहर करने के लिए जरूरत है एक zone_id शामिल करने के लिए लेकिन,। ("आईडी", "बनाया_ट", "अपडेट_ट", आदि)।

तो आप जो भी उचित पोस्ट अनुरोध में देखते हैं, उसमें ज़ोन के लिए पैराम्स हैश जानकारी स्पष्ट रूप से डालने से बेहतर हो सकता है।

factorygirl विशेषताओं और संघों पर इस सूत्र पढ़ें: https://github.com/thoughtbot/factory_girl/issues/359

3

guide के रूप में बताते हैं:

# Returns a hash of attributes that can be used to build a User instance 
attrs = FactoryGirl.attributes_for(:user) 
संबंधित मुद्दे