我有一个带有数组的方法的ActionMailer,它会为该数组中的每个项目发送一封电子邮件。我想在测试中检查ActionMailer::Base.deliveries
,看看是否发送了正确的电子邮件。首先,我检查发送的电子邮件数量:
ActionMailer::Base.deliveries.size.should be == my_array.size
是的,断言按预期传递。
但是ActionMailer::Base.deliveries
似乎已经发送了最后一封电子邮件的所有克隆。手动测试让我确信ActionMailer::Base.deliveries
对我说谎 - 事实上发送了唯一的电子邮件,而不是最后一次发送N次。我不明白吗?
答案 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属性仍然相同。