Почему мои тесты Rspec отправляют реальные письма? - PullRequest
1 голос
/ 15 марта 2012

Я учил, что с параметром, подобным delivery_method = :test в моем config/environments/test.rb, я не должен получать никаких писем при выполнении моих тестов Rspec:

конфиг / окружающая среда / test.rb:

config.action_mailer.delivery_method = :test

Но в моих тестах, когда я создаю пользователя с FactoryGirl и у него есть обратный вызов after_save, который отправляет уведомление о регистрации, это письмо будет отправлено:

myspec.rb:

user = FactoryGirl.create(:user, :login => 'johndoe')

user_observer.rb:

class UserObserver < ActiveRecord::Observer
  def after_create(user)
    UserMailer.signup_notification(user).deliver
  end
end

action_mailer.rb:

ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.smtp_settings = {
  :address => "...",
  :port => "25",
  :domain => "...",
  :user_name => "...",
  :password => "...",
  :authentication => :plain
}

Что может быть не так?

Я использую:

  • Рельсы 3.2.2
  • сборка ActionMailer
  • RSpec-Rails
  • FactoryGirl
  • Guard

1 Ответ

0 голосов
/ 15 марта 2012

Да, вы правы. ActionMailer :: Base.delivery_method =: smtp маскирует вашу конфигурацию в environment / test.rb

Я предлагаю вам следующее решение: создайте приспособление с конкретными данными для каждой области.
как в введите описание ссылки здесь
в моем случае это выглядит так:

мой config.yml

 development:
      support_mail: test@test.test
      smtp_user_name: test@test.test
      smtp_password: test
      smtp_domain: test.test
      smtp_address: test.test.test
      smtp_port: => 999

    test:
      support_mail: test@test.test
      smtp_user_name: test@test.test
      smtp_password: test
      smtp_domain: test.test
      smtp_address: test.test.test
      smtp_port: => 999

    production:
      support_mail: somth@somth.com
      smtp_user_name: somth@somth.com
      smtp_password: somth
      smtp_domain: somth.com
      smtp_address: smtp.somth.com
      smtp_port: => 587

мое окружение. Rb

# Load the rails application
require File.expand_path('../application', __FILE__)
#initialize custom config variables
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]
    ActionMailer::Base.smtp_settings = {
      :user_name => APP_CONFIG["smtp_user_name"], #ENV['SENDGRID_USERNAME'],
      :password => APP_CONFIG["smtp_password"], #  ENV['SENDGRID_PASSWORD'],
      :domain => APP_CONFIG["smtp_domain"],
      :address => APP_CONFIG["smtp_address"],
      :port => APP_CONFIG["smtp_port"],
      :authentication => :plain,
      :enable_starttls_auto => false
    }
ActionMailer::Base.delivery_method = :smtp
...