ActionMailer envoie de vrais e-mails en mode test! - Comment désactiver?

les utilisateurs nouvellement inscrits à ma petite application doivent être approuvés par l'administrateur (moi) avant de pouvoir accéder au site. J'ai réussi à générer de tels e-mails en développement avec un after_create :send_admin_email dans mon modèle utilisateur qui fonctionne très bien. Mon problème est que je génère plusieurs utilisateurs pendant mes tests (en utilisant FactoryGirl) et chaque utilisateur de test créé envoie un vrai e-mail. Faire mes tests c'est comme verser de la mélasse en janvier et je dois supprimer des centaines d'e-mails envoyés à ma boîte de réception. Comment puis-je désactiver cette fonction?

Action Mailer "Bases de 1519100920" dans le Rails Guides me dit que "Par défaut Action Mailer ne pas envoyer d'e-mails dans l'environnement de test. Ils sont simplement ajoutés à L'ActionMailer::Base.tableau des livraisons."

de plus, dans config/environments/test.rb j'ai:

config.action_mailer.delivery_method = :test

en plus de config/environment.rb ayant:

# 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

je suis je suis sûr que je manque quelque chose de simple et basique. J'ai cherché autour et les questions et les messages connexes traitent de la façon de tester que ActionMailer a réellement envoyé le courrier électronique.

Humble gratitude à l'avance pour toute pensée ou aide.

Addendum: suite réponse à une question similaire trouvée à est - il possible d'éteindre les emails ActionMailer lorsque le test du concombre est en cours sur le développement? j'ai pu arrêter l'envoi d'e-mail folie. Néanmoins, j'ai dû ajouter ActionMailer::Base.delivery_method = :test à plusieurs fichiers rspec. Est il possible que je peux fermer ce bas monde? N'importe qui ont des idées sur ce qu'il se passe?

21
demandé sur Community 2012-06-09 18:52:57

3 réponses

donc j'ai compris. Ayant la ligne ActionMailer::Base.delivery_method = :smtp dans config/environment.rb remplace ActionMailer::Base.delivery_method = :test dans config/environments/test.RB.

donc, supprimer cette ligne, ActionMailer::Base.delivery_method = :smtp' de config / environment.rb et le placer dans le répertoire config/environments/production.RB. Cela vous permet de placer ActionMailer::Base.delivery_method = :test dans config/environments/test.rb et la version que vous voulez dans config/environments/development.RB. J'ai fait le développement.rb :test comme j'ai rempli ma base de données en utilisant Faker et changé en smtp donc j'étais sûr que de vrais e-mails ont été envoyés comme un chèque supplémentaire.

Note : vous devez redémarrer votre serveur pour que ces changements prennent effet.

une Autre note : Heroku actuel de SendGrid Instructions "1519180920 de" mettre le SendGrid Heroku code de configuration dans une nouvelle config/initializers/mail.rb fichier qui sera probablement exiger le retrait de ses dernière ligne et placer la version désirée dans chaque config/environnements/[production.rb, de développement.RB, test.rb]

34
répondu BenU 2012-10-24 15:04:14

peut-être utile...

Ma config/environment.rb n' pas contenir ActionMailer::Base.delivery_method = :smtp et ma config/environments/test.rb a contenir ActionMailer::Base.delivery_method = :test mais les Rails encore livré les expéditeurs lors des tests.

j'ai simplement ajouté ce qui suit à config/environments/test.rb à fixer:

config.action_mailer.perform_deliveries = false
13
répondu brntsllvn 2015-06-14 01:31:08

j'ai fait face à la même situation dans Rails4.2 (Intégration ActiveJob avec ActionMailer) même si je n'ai pas écrire delivery_method = :smtp dans config/environment.RB.

dans mon cas, la question en litige en l'espèce est survenue après l'utilisation de" marque " comme travailleur d'arrière-plan. Finalement, j'ai découvert que la configuration suivante était WRONG :

config/initializers / active_job.rb:

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

...parce qu'il a aussi affecté le mode test.

Donc, j'ai mis "queue_adapter = :resque" seulement dans config/environments/{développement,de la production.RB.} Maintenant, que les œuvres que je pense.

0
répondu Fumisky Wells 2017-12-22 07:28:09