ActionMailer :: Base.deliveries имеет последнее электронное письмо N раз - PullRequest
1 голос
/ 02 апреля 2012

У меня есть ActionMailer с методом, который принимает массив, и он отправляет электронное письмо для каждого элемента в этом массиве.Я хочу проверить ActionMailer::Base.deliveries в тесте, чтобы увидеть, были ли отправлены правильные электронные письма.Сначала я проверяю количество отправленных писем:

ActionMailer::Base.deliveries.size.should be == my_array.size

Да, утверждение проходит, как и ожидалось.

Но, похоже, в ActionMailer::Base.deliveries есть все клоны последнего отправленного письма.Ручное тестирование убеждает меня в том, что ActionMailer::Base.deliveries обманывает меня - что уникальные электронные письма на самом деле отправляются, а не последние N раз.Я что-то не понимаю?

1 Ответ

0 голосов
/ 22 ноября 2012

Я тоже столкнулся с этим странным поведением (Rails 3.2.9) и в итоге использовал этот уродливый обходной путь:

  email = mail(:from => options[:from], :to => options[:to], :subject => options[:subject]) do |format|
    format.text { render :text => options[:text] }
  end
  if Rails.env.test?
    email = Marshal.load( Marshal.dump(email) )
  end
  email.deliver

Обратите внимание, что .dup или .clone не работают - атрибуты .to и .from остались бы прежними.

...