2010-09-09 5 views
5

यह एक शुद्ध वाक्य रचनात्मक सवाल है। मैं आरएसपीसी के लिए बहुत नया हूँ।आप `current_user` को अपडेट_ट्रिब्यूट्स के साथ गलत पर सेट कैसे करते हैं?

मैं मूल रूप से इस erroring लाइन की तर्ज पर कुछ लिखना चाहते हैं:

controller.stub!(:current_user(:update_attributes => false)) 

किसी को भी पता है कि कैसे ठीक है कि लिखने के लिए?

RSpec के डिफ़ॉल्ट इस तरह दिखता है:

User.stub(:find) { mock_user(:update_attributes => false) } 

उत्तर

8

यह stub_chain के लिए एक केस की तरह दिखता है:

controller.stub_chain(:current_user,:update_attributes).and_return(false)

ध्यान दें कि यह सिर्फ क्रम में सूची में तरीकों को बदलने के लिए जा रहा है कि वे ऐसा होता है, इसलिए यह समझने के लिए आपके पास आपके नियंत्रक में current_user.update_attributes होगा। अगर आपके पास @user.update_attributes जैसा कुछ है, तो मुझे नहीं लगता कि यह काम करेगा। APIDock

+4

आपका काम भी करता है! Stub_chaining अद्भुत है! : डी मैं ज़ेटेटिक के बिना कहाँ होगा? शायद मैकडॉनल्ड्स – Trip

+0

लॉल पर काम कर रहा है! - तुम मुझे यहाँ मार रहे हो :) – zetetic

6

मैं बस आँख बंद करके एक हजार बदलाव के साथ चारों ओर खेला और अंत में यह मिल गया पर

अधिक जानकारी इस के साथ पारित करने के लिए:

controller.stub!(:current_user).and_return(@user) 
@user.stub!(:update_attributes => false) 

लेकिन गंभीरता से, कि यहां तक ​​कि कोई मतलब है? यह गुजर रहा है: डी

+1

सही समझ में आता है। current_user एक विधि है जो उपयोगकर्ता का एक उदाहरण देता है। current_user में update_attributes विधि नहीं है, उपयोगकर्ता करता है। तो current_user के लिए update_attributes को stubbing कुछ भी नहीं करता है लेकिन उम्मीद के अनुसार उपयोगकर्ता कार्यों के उदाहरण के लिए इसे दबा रहा है। – jvatic

2

आरएसपीसी 3.0 और rspec-mocks के साथ ऐसा करने का तरीका allow का उपयोग करना है।

before(:each) do 
    @user = mock_model(User) 
    allow(controller).to(receive(:current_user).and_return(@user)) 
    allow(@user).to(receive(:update_attributes).and_return(false)) 
end 
0

यह विशेष रूप से update_attributes को संबोधित नहीं करता है, लेकिन मेरे लिए काम किया गया था। एप्लिकेशन कंट्रोलर में अपने वर्तमान_यूसर सहायक जीवन को मानते हुए:

user = double(:user) 
allow(controller).to(receive(:current_user).and_return(user)) 
allow(controller.current_user).to receive(:is_admin?).and_return(false) 

current_user.is_admin? # => false 
संबंधित मुद्दे