Попытка вернуть массив всех отправленных писем из одного метода actionmailer для целей тестирования - PullRequest
0 голосов
/ 09 мая 2019
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. Я считаю, что это работает нормально, но я хотел бы убедиться, что все электронные письма отправляются с тестом. С этой целью я пытаюсь вернуть массив всех отправленных сообщений, но, похоже, методы почтовой программы всегда будут возвращать последний отправленный экземпляр Mail.

Есть идеи? Нужно ли собирать мою коллекцию пользователей, а затем перебирать их вне почтовой программы, отправляя, таким образом, одно электронное письмо за раз из фактической функции, описанной выше? Или есть способ сделать все это внутри функции почтовой программы и проверить, что все электронные письма отправляются?

1 Ответ

0 голосов
/ 09 мая 2019

В конечном итоге я решил, что проще всего будет собрать группу пользователей вне этого метода, а затем выполнить итерацию по коллекции и вызвать этот метод для каждого отдельного пользователя.

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
...