2011-08-24 11 views
6

के साथ अधिसूचना क्या कोई जानता है कि आप सक्रिय समर्थन अधिसूचना कैसे प्राप्त कर सकते हैं? निम्नलिखित काम नहीं लग रहा है। यह डिफ़ॉल्ट रेल ढांचे अधिसूचनाओं का पता लगाता है लेकिन मेरा कस्टम नहीं।परीक्षण सक्रिय समर्थन :: rspec

it 'sends a "product.search" notification to any subscribers listening' 
    ActiveSupport::Notifications.should_receive(:instrument).with("product.search", :search => search) 
    get :search, ... 
end 

अगर मैं ग्राहक के कोड (जैसे रिकॉर्ड गिनती परिवर्तन जब एक डीबी रिकॉर्ड बनाने के) पास कर देता है के परिणाम की जाँच करने के कल्पना बदल जाते हैं। यह पुष्टि करता है कि यह ठीक काम कर रहा है। लेकिन, यह सोचने में गलत लगता है कि ग्राहक यहां क्या करता है, मैं बस यह अनुमान लगाता हूं कि अधिसूचना भेजी जा रही है। किसी भी विचार की सराहना की जाएगी।

संपादित करें:

यहाँ है कि मैं विशिष्ट जानकारी के अनुसार कोशिश कर रहा हूँ नियंत्रक कोड है:

ActiveSupport::Notifications.instrument("product.search", :search => 'test') 
+0

आपका टैग 'rpsec' टाइपो है? [शायद इरादा 'rspec'?] – Shad

उत्तर

2

मैं एक नियमित :get कार्रवाई का उपयोग कर, कुछ किसी न किसी तरह हस्तक्षेप करना चाहिए परीक्षण को प्राप्त करने में असमर्थ था और केवल start_processing और process_action नोटिफिकेशन ट्रिगर किए गए हैं। मुझे लगता है कि इसे प्रदर्शन के लिए अक्षम कर दिया गया है।

लेकिन यह सफलतापूर्वक काम करता है:

it 'sends a "product.search" notification to any subscribers listening' 
    ActiveSupport::Notifications.should_receive(:instrument).with("product.search", :search => "test") 
    controller.index 
end 
5

मैं एक ही मुद्दा था और निम्नलिखित rspec सहायक नीचे दी गई विधि ने लिखा है:

def notification_payload_for(notification) 
    payload = nil 
    subscription = ActiveSupport::Notifications.subscribe notification do |name, start, finish, id, _payload| 
     payload = _payload 
    end 

    yield 

    ActiveSupport::Notifications.unsubscribe(subscription) 

    return payload 
    end 

इस तरह, मैं इसे इस रूप में उपयोग कर सकते हैं:

it "should raise the my_notification_name notification" do 
    payload = notification_payload_for('my_notification_name') do 
     # do stuff that should raise the proper notification 
    end 

    # test to see that the payload has the correct info 
    end 
संबंधित मुद्दे