Ruby on rails 如何在测试环境中关闭ActionMailer?

Ruby on rails 如何在测试环境中关闭ActionMailer?,ruby-on-rails,rspec,actionmailer,Ruby On Rails,Rspec,Actionmailer,当我用RSpec运行测试时,我收到了真实的电子邮件。 我已经把所有的东西都按写的那样做了(我已经添加了更改我的环境配置以不发送电子邮件,但它根本没有任何效果。我想我的设置在某个地方被替换了,但我找不到在哪里 这是我对测试环境的配置(config/environments/test.rb) 这是我的邮件: class ApplicationMailer < ActionMailer::Base default from: 'hello@myapp.com' layout 'maile

当我用RSpec运行测试时,我收到了真实的电子邮件。 我已经把所有的东西都按写的那样做了(我已经添加了更改我的环境配置以不发送电子邮件,但它根本没有任何效果。我想我的设置在某个地方被替换了,但我找不到在哪里

这是我对测试环境的配置(config/environments/test.rb

这是我的邮件

class ApplicationMailer < ActionMailer::Base
  default from: 'hello@myapp.com'
  layout 'mailer'

  ADMIN_EMAIL = 'admin@myapp.com'
end

class AdminMailer < ApplicationMailer
  default to: "#{ADMIN_EMAIL}"

  def mandrill_client
    @mandrill_client ||= Mandrill::API.new MANDRILL_API_KEY
  end

  def new_user(user)
    #set required params
    mandrill_client.messages.send_template template_name, template_content, message
  end

end
class ApplicationMailer

似乎我错过了一些非常明显的东西。但是我需要你的帮助来打破它。

因为你使用
Mandrill::API
来发送电子邮件,而不是
ActionMailer
,你对
ActionMailer
的设置对它绝对没有影响

您应该在
Mandrill::API
中找到相应的设置,或者为测试存根send方法

实际上,我建议您在Mandrill SMTP服务器上仍然使用
ActionMailer

config.action_mailer.smtp_settings = {
  address: 'smtp.mandrillapp.com',
  port: 587,
  domain: Rails.application.config_for(:global)['domain'],
  authentication: 'plain',
  enable_starttls_auto: true,
  user_name: Rails.application.secrets.email_provider_username,
  password: Rails.application.secrets.email_provider_apikey
}

检查您是否在某个地方有重复的操作邮件程序配置,可能是application.rb,并检查您的测试是否在适当的环境中运行。我已检查,没有重复,测试正在测试环境中运行。
config.action_mailer.smtp_settings = {
  address: 'smtp.mandrillapp.com',
  port: 587,
  domain: Rails.application.config_for(:global)['domain'],
  authentication: 'plain',
  enable_starttls_auto: true,
  user_name: Rails.application.secrets.email_provider_username,
  password: Rails.application.secrets.email_provider_apikey
}