2011-04-03 19 views
6

यह आसान होना चाहिए, लेकिन मैं इसे काम नहीं कर सकता। मैं एक स्टब करना चाहता हूं:रुपे मॉडल/सहेजें में मॉडल मॉडल सहेजें

@alliance.save 

ताकि यह सच हो सके। मैंने कोशिश की:

Alliance.stub(:save).and_return(true) 

लेकिन यह काम नहीं करेगा। कोई विचार ?

उत्तर

14

यदि मुझे गलत नहीं है, तो Alliance.stub(:save)Alliance.save पर कॉल को प्रभावित करेगा। आप @alliance.stub(:save).and_return(true) चाहते हैं। ताकि आप Alliance.any_instance.stubs(:save).returns(true) की तरह कुछ है, जो (जैसा कि नाम से स्पष्ट) Alliance के किसी भी उदाहरण के लिए ठूंठ save विधि कर सकता है

Mocha, एक उपयोगी विधि any_instance है।

+0

हम्म, मैं वास्तव में लगता है कि यह एक ही है, क्योंकि बचाने एक उदाहरण विधि है। जो भी मामला है, मैं वास्तव में @alliance तक नहीं पहुंच सकता, क्योंकि यह एक मानक बनाने विधि में "@alliance = Alliance.new (पैराम्स [: गठबंधन])" जैसा है। मैं बस सहेजने के सत्यापन को बाईपास करना चाहता हूं क्योंकि मैं पोस्ट वैरिएबल को ": पोस्ट: बनाना,: name => 'जो कुछ भी" – Spyros

+0

के माध्यम से पास करने में सक्षम नहीं प्रतीत होता है, यह उल्लेख करते हुए कि आप एक आवृत्ति चर पर विधि को स्टब करना चाहते हैं एक नियंत्रक में आपको अधिक सटीक प्रतिक्रिया प्राप्त करने में मदद मिल सकती है। ;) –

+0

लेकिन मैं इसका उल्लेख करता हूं :) :) – Spyros

4

आप शायद की तरह कुछ के लिए देख रहे:

describe AllianceController do 
    let(:alliance) { mock_model(Alliance) } 

    describe "#<controller action>" do 
    before do 
     Alliance.stub :new => alliance 
    end 

    context "valid alliance" do 
     before do 
     alliance.stub :save => true 
     end 

     it "should ..." do 

     end 
    end 
    end 
end 

आंतरिक संदर्भ आप एक एलायंस नकली जो बचाने विधि सच लौटने के लिए टोंटदार के साथ काम करने की अनुमति देता है।

+0

+1 टिप्पणियों में स्पाइरोसपी से अधिक जानकारी प्राप्त करने के बाद, मुझे लगता है कि यह शायद नियंत्रक का परीक्षण करने का सबसे अच्छा तरीका है (भले ही उन्हें काम करने के लिए उनके पैराम मिल गए हों)। –

6

नई RSpec वाक्य रचना का उपयोग करना:

allow_any_instance_of(Alliance).to receive(:save).and_return(true)