23

私の小さなアプリに新しくサインアップしたユーザーは、サイトにアクセスできるようになる前に、管理者 (私) によって承認される必要があります。私は、うまくafter_create :send_admin_email機能するユーザーモデルを使用して、開発中にそのような電子メールを生成することに成功しました。私の問題は、テスト中に (FactoryGirl を使用して) 複数のユーザーを生成しており、作成した各テスト ユーザーが実際の電子メールを送信することです。テストを実行することは、1 月に糖蜜を注ぐようなもので、受信トレイに送信された何百ものメールを削除する必要があります。どうすればそれをオフにできますか?

Rails GuidesのAction Mailer Basicsには、「デフォルトでは、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 email when cucumber testing is going on development?にある同様の質問への回答に従ってください。メール送信の狂気を止めることができました。それでも、ActionMailer::Base.delivery_method = :testいくつかの rspec ファイルに追加する必要がありました。これをグローバルにシャットダウンする方法はありますか? 何が起こっているのか考えている人はいますか?

4

3 に答える 3

40

だから私はそれを理解しました。config/environment.rbに行があると、config/environments/test.rb で ActionMailer::Base.delivery_method = :smtpオーバーライドされます。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 に配置できます。:testFaker を使用してデータベースにデータを入力するようにdevelopment.rb を作成し、それを に変更したsmtpので、追加のチェックとして実際のメールが送信されたことを確認しました。

: これらの変更を有効にするには、サーバーを再起動する必要があります。

別のメモ: Heroku の現在の SendGrid 手順では、SendGrid Heroku 構成コードを新しい config/initializers/mail.rb ファイルに配置します。これには、最後の行を削除し、必要なバージョンを各 config/environments/[production.rb, development. rb、test.rb]

于 2012-06-10T15:48:57.367 に答える
16

おそらく便利...

config/environment.rbには含まれておらActionMailer::Base.delivery_method = :smtp、config/environments/test.rbに含まれていましたActionMailer::Base.delivery_method = :testが、Rails はテスト中にメーラーを配信しました。

config/environments/test.rb に以下を追加して修正しました:

config.action_mailer.perform_deliveries = false
于 2015-06-14T01:09:23.470 に答える