2012-06-09 36 views
21

新註冊的用戶到我的小應用程序必須經過管理員(我)的批准,然後才能訪問該網站。我成功地在用戶模型中生成了一個after_create :send_admin_email開發這樣的電子郵件,這非常棒。我的問題是我在測試期間(使用FactoryGirl)生成了多個用戶,並且每個創建的測試用戶發送了一封真正的電子郵件。運行我的測試就像在一月份澆糖漿,我必須刪除發送到我的收件箱的數百封電子郵件。我該如何解決這個問題?ActionMailer以測試模式發送真實電子郵件! - 如何關閉?

Action Mailer BasicsRails Guides告訴我:「默認情況下,Action Mailer不會在測試環境中發送電子郵件,它們只會添加到ActionMailer :: Base.deliveries數組中。」

而且,在config/environments/test.rb我有:

config.action_mailer.delivery_method = :test 

這是除了在config/environment.rb有:

# Configuration for using SendGrid on Heroku 
ActionMailer::Base.smtp_settings = { 
    :address  => 'smtp.sendgrid.net', 
    :port   => '587', 
    :authentication => :plain, 
    :user_name  => 'app[my app number]@heroku.com', 
    :password  => '[something super secret]', 
    :domain   => '[let's get this party started!.com]', 
    :enable_starttls_auto => true 
} 
ActionMailer::Base.delivery_method = :smtp 

我敢肯定,我失去了一些東西簡單和基本的。我搜索了周圍,相關的問題和帖子處理如何測試ActionMailer實際發送的電子郵件。

謙虛的態度提前任何想法或幫助。

附錄:以下的答案在Is it possible to turn off ActionMailer emails when cucumber testing is happening on development?發現了類似的問題,我是能夠阻止電子郵件發送瘋狂。不過,我不得不將ActionMailer::Base.delivery_method = :test添加到幾個rspec文件。有什麼辦法可以讓全球關閉?任何人對發生了什麼有什麼想法?

+0

有了所有這些電子郵件,我超過了發送電網允許的200 /天。我發現[如何編寫實際上不使用Sendgrid的功能?](https://groups.google.com/group/heroku/browse_thread/thread/7a4044f299ccf1fc/a0d687041fd97389?pli=1),其中說'ActionMailer :: Base.delivery_method =:config/environment.rb中的smtp'正在覆蓋'config/environments/test.rb中的'config.action_mailer.delivery_method =:test'我已經移動了'ActionMailer :: Base.delivery_method =:smtp'轉換成'config/environments/development.rb'和'config/environments/production.rb'這可能工作。明天更新。 – BenU

回答

34

所以,我已經想通了。將config/environment.rb中的ActionMailer::Base.delivery_method = :smtp行替換爲config/environments/test.rb中的ActionMailer::Base.delivery_method = :test

因此,從config/environment.rb中刪除該行,ActionMailer::Base.delivery_method = :smtp' ,並將其放置在config/environments/production.rb中。 這允許您將ActionMailer::Base.delivery_method = :test放置在config/environments/test.rb中,並在config/environments/development.rb中放置所需的版本。我做了development.rb :test我使用法克爾填充我的數據庫,並將其變更爲smtp所以我確信真正的郵件被送到作爲額外的檢查。

注意:您必須重新啓動服務器,這些更改生效。

另注Heroku's current SendGrid Instructions把SendGrid Heroku的配置代碼在一個新的配置/初始化/ mail.rb這將可能需要刪除文件的最後一行,並把所需的版本中的每個配置文件/環境/ [production.rb ,development.rb,test.rb]

+1

+1關於heroku的sendgrid說明,謝謝! –

+0

感謝您的覆蓋信息!這就是我需要知道的,使我所有的測試再次成爲綠色。 –

12

也許有用...

我到config/environment.rb並包含ActionMailer::Base.delivery_method = :smtp和我的配置/環境/ test.rb 沒有包含ActionMailer::Base.delivery_method = :test但Rails的仍然在測試時交付郵件。

我簡單地加入下列到配置/環境/測試。RB修復:

config.action_mailer.perform_deliveries = false 
0

我面臨Rails4.2類似的情況(與的ActionMailer ActiveJob集成),即使我沒有寫DELIVERY_METHOD =:SMTP中的config/environment.rb中。

對我而言,這裏的問題發生在使用「resque」作爲背景工作者之後。最後,我發現了以下配置是WRONG

配置/初始化/ active_job.rb:

Rails.application.config.active_job.queue_adapter = :resque # here is WRONG 

...因爲它影響到測試模式爲好。

所以,我只在config/environments/{development,production.rb}中設置了「queue_adapter =:resque」。現在,它按我的預期工作。

相關問題