2010-12-08 22 views
6

परीक्षण रूबी में के लिए ही पते तक सभी बाहर जाने वाले ईमेल को पुन: निर्देशित, मैं एक स्थिति है जहाँ मैं अपने आवेदन (एक विशेष परीक्षण वातावरण में) जाने वाले एप्लिकेशन द्वारा उत्पन्न सभी बाहर जाने वाले ईमेल रोकना और बजाय उन्हें भेजने के लिए में हूँ एक अलग, परीक्षण पते (शायद यह भी कहने के लिए शरीर को संशोधित करना "प्रारंभ में भेजा गया: ...")।ऑन रेल्स

मैं ActionMailer देखने के कुछ हुक या अवरोधन मेल निरीक्षण करने के लिए है, लेकिन मैं अपने खुद के समाधान स्पिन वहाँ यह करने के लिए एक आसान तरीका है नहीं करना चाहती। सुझाव?

उत्तर

11

हम ज्यादा सफलता के साथ sanitize_email मणि का उपयोग कर रहे हैं। यह आपके द्वारा निर्दिष्ट पते पर सभी ईमेल भेजता है और विषय को मूल प्राप्तकर्ता के साथ प्रीपेड करता है। ऐसा लगता है कि यह वही करता है जो आप चाहते हैं और क्यूए-आईएनजी ईमेल को हमारे लिए हवा बना दिया है।

+0

यह वही दिखता है जो मैं ढूंढ रहा हूं। धन्यवाद! – jrdioko

1

आमतौर पर क्या आप परीक्षण में क्या निरीक्षण ActionMailer :: Base.deliveries, जो मेल है कि आपके आवेदन के माध्यम से भेज दिया गया है के लिए TMail वस्तुओं की एक सरणी है। परीक्षण वातावरण में डिफ़ॉल्ट सेटिंग्स हैं कि कुछ भी वितरित नहीं होता है, बस उस सरणी में डाल दें।

मैं भी अपने परीक्षण में email_spec का उपयोग कर इस पर गौर चाहते हैं। अपनी खुद की परीक्षण कार्यक्षमता रोलिंग से कहीं अधिक सुविधाजनक। Email_spec, कैपिबरा के सहायक कार्यों और वेब चरणों, और factory_girl के उपयोग के बीच, जो कि मेरे अधिकांश अनुप्रयोगों में परीक्षण के लिए अनुप्रयोग के सतह क्षेत्र का लगभग 80% है।

1

पुराना सवाल है, लेकिन गूगल पर पहले मारा ...

मैं अंत में (ab) द्वारा एक अलग ढंग से इस हल delivery_method = :sendmail का उपयोग कर, यह प्रभावी सिर्फ पाइप कुछ निष्पादन के लिए एक ईमेल; यह sendmail माना जाता है, लेकिन यह वास्तव में कुछ भी हो सकता है।

अपने config/environments/development.rb आप की तरह कुछ कर सकते हैं में:

YourApp::Application.configure do 
    # [...] 
    config.action_mailer.delivery_method = :sendmail 
    config.action_mailer.sendmail_settings = { 
     location: "#{Rails.root}/script/fake-sendmail", 
     arguments: '[email protected]', 
    } 
end 

और फिर बनाने के script/fake-sendmail:

#!/bin/sh 
sendmail -if [email protected] "$1" < /dev/stdin 

(इस निष्पादन योग्य बनाने के लिए मत भूलना)

इससे संबंधित एक समाधान (जो मैं पसंद करता हूं) इसे सिर्फ एक एमबॉक्स फ़ाइल में जोड़ना है; यह बहुत कम सेटअप की आवश्यकता है।

config/environments/development.rb जैसा दिखता है: अब

YourApp::Application.configure do 
    # [...] 
    config.action_mailer.delivery_method = :sendmail 
    config.action_mailer.sendmail_settings = { 
     location: "#{Rails.root}/script/fake-sendmail", 
     arguments: "'#{Rails.root}/tmp/mail.mbox'", 
    } 
end 

और script/fake-sendmail लगता है:

#!/bin/sh 
echo "From FAKE-SENDMAIL $(date)" >> "$1" 
cat /dev/stdin >> "$1" 
echo >> "$1" 

ओपन $any ईमेल क्लाइंट के साथ mbox फ़ाइल ...

यह एक बहुत ही सरल तरीका है , यह काफी अच्छी तरह से काम करता प्रतीत होता है। कुछ और विवरण can be found here (मैं इस पृष्ठ का लेखक हूं)।

संबंधित मुद्दे