尝试 return 来自一个 actionmailer 方法的所有已发送电子邮件的数组以用于测试目的

Trying to return an array of all sent emails from one actionmailer method for test purposes

def no_products_2
    @users = [].tap{|users| User.created_days_ago(2).each{|user| users << user if user.buyer_products.empty?}}
    sent_mail = [].tap{|sent_mail| @users.each{|user| sent_mail << (mail to: user.email, subject: "You Haven't Submitted Any Designs Yet")}}
end

我的目的是通过一种 Mailer 方法向一组用户发送电子邮件。我相信这工作正常,但我希望能够确保所有电子邮件都通过测试发送。为此,我正在尝试 return 所有已发送邮件的数组,但邮件程序方法似乎总是 return 最后发送的 Mail 实例。

有什么想法吗?我是否需要 assemble 我的用户集合,然后在邮件程序之外迭代它们,从而从上述实际功能一次发送一封电子邮件?或者有没有一种方法可以在邮件程序函数中执行所有这些操作并测试是否所有电子邮件都已发送?

最终,我决定最简单的做法是 assemble 在该方法之外收集用户集合,然后遍历该集合并对每个用户调用该方法。

def other_method
    @users = [].tap{|users| Order.awaiting_payment(3).each{|order| users << order.buyer.user}}
    @users.each{|user| UserMailer.no_products_2(user.id).deliver}
end

def no_products_2(user_id)
    @user = User.find(user_id)
    mail to: @user.email, subject: "You Haven't Submitted Any Designs Yet"
end