тестирование электронных писем с капибарой и delayed_job - PullRequest
4 голосов
/ 01 сентября 2011

Вдохновленный эпизодом Railscast (http://railscasts.com/episodes/275-how-i-test) Я пытался добавить некоторые спецификации запросов в свое приложение.

, используя delayed_job для отправки своих электронных писем, я не нашел простой способ проверить отправку электронных писемв рамках моего теста на капибару. Я попробовал:

    it "emails user when requesting password reset" do
      ...(some user action that triggers sending an email)...
      Delayed::Worker.new.work_off
      ActionMailer::Base.deliveries.last.to.should include(user.email)
    end

спасибо за любые подсказки или помощь!

Ответы [ 2 ]

8 голосов
/ 03 декабря 2011

Намного более простое решение: просто создайте инициализатор в config / initializers, например, delayed_job_config.rb

Delayed::Worker.delay_jobs = !Rails.env.test?

В вашем реальном тесте вам даже не нужно знать, что delayed_job используется для отправки писем, что делает их чистыми и простыми.

3 голосов
/ 02 сентября 2011

ну, это должно работать. я обнаружил некоторые неправильные конфигурации в моем приложении.

проверьте ваш тест env. Вы должны установить:

Staffomatic::Application.configure do
  ...
  config.action_mailer.delivery_method = :test
  config.action_mailer.default_url_options = { :host => "example.com" }
end

я добавил строку в модуль макросов почтовой программы из Railscast, чтобы отработать Delayed :: Job:

module MailerMacros
  def last_email
    Delayed::Worker.new.work_off
    ActionMailer::Base.deliveries.last
  end

  def reset_email
    Delayed::Job.destroy_all
    ActionMailer::Base.deliveries = []
  end
end

Теперь вы можете проверить с помощью:

last_email.to.should include(user.email)

ваше последнее письмо.

довольно просто!

пс. если у вас установлен удивительный гем mail_safe, убедитесь, что его нет в тестовой среде!

...