2011-09-02 9 views
5

साथ after_create हुक मैं (आरओआर 3.0.x) है कि कम या ज्यादा इस तरह अपने मॉडल में कोड है:परीक्षण rspec

class Message 

    after_create :notify 

    protected 

    def notify 
     if visible? 
      Notifier.message_from_portfolio(user, self).deliver 
     else 
      Notifier.invisible_message_from_portfolio(user, self).deliver 
     end 
    end 

end 

और मैं यह परीक्षण करने के लिए नवीनतम rspec मणि उपयोग कर रहा हूँ। समस्या यह है कि मैं अधिसूचना विधि का परीक्षण करने में सक्षम नहीं हूं: अगर मैं इसे सीधे जांचता हूं तो मैं नहीं कर सकता क्योंकि यह सुरक्षित है, अगर मैं एक संदेश बनाता हूं और उम्मीदों को सेट करता हूं तो यह काम नहीं करता है क्योंकि स्पष्ट रूप से आरएसपीईसी अधिसूचना चलाता है मेटोड मैं समय पर कॉल पकड़ने में सक्षम नहीं हूं।

मेरे कल्पना है:

describe :notification do 
    it "should send the whole message by email when visible" do 
     u = Factory.create(:user, :account_type => 1) 
     message = u.messages.build(:body => "Whatever", :author => "Nobody", :email => "[email protected]") 
     Notifier.should_receive(:message_from_portfolio) 
     message.save 
    end 
end 

वस्तु सूचक message_from_portfolio कभी नहीं प्राप्त करता है। मैं क्या गलत कर रहा हूं? सुझाव?

उत्तर

3

Factory.create पहले से ही संदेश को बचाया है, तो यह, बनाया जा रहा नहीं है सिर्फ बचाया: यदि आप एक नकारात्मक उम्मीद इस्तेमाल कर सकते हैं कि जांच करने के लिए। इसे Factory.build के साथ बदलें और सभी ठीक होना चाहिए।

+0

लेकिन 'u.messages.build' का उपयोग किया गया था। क्या आप यही सुझाव नहीं देते? – lulalala

0

क्या आप वाकई कॉलबैक तक पहुंच रहे हैं? उदाहरण के अमान्य होने पर after_create निष्पादित नहीं किया गया है।

आप डीबगिंग उद्देश्यों के लिए एक उम्मीद सेट कर सकते हैं:

message.should_receive(:after_create) 

या हो सकता है visible? रिटर्न झूठी?

Notifier.should_not_receive(:invisible_message_from_portfolio)