ActionMailer :: Base.deliveries有最后一封电子邮件N次

时间:2012-04-02 04:43:48

标签: ruby-on-rails-3.1 actionmailer

我有一个带有数组的方法的ActionMailer,它会为该数组中的每个项目发送一封电子邮件。我想在测试中检查ActionMailer::Base.deliveries,看看是否发送了正确的电子邮件。首先,我检查发送的电子邮件数量:

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

是的,断言按预期传递。

但是ActionMailer::Base.deliveries似乎已经发送了最后一封电子邮件的所有克隆。手动测试让我确信ActionMailer::Base.deliveries对我说谎 - 事实上发送了唯一的电子邮件,而不是最后一次发送N次。我不明白吗?

1 个答案:

答案 0 :(得分:0)

我也遇到了这种奇怪的行为(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属性仍然相同。