如何强制ActionMailer错误进行测试?

时间:2015-09-24 19:40:39

标签: ruby-on-rails ruby actionmailer

我有这段代码根据条件发送电子邮件。如果有错误,它应该捕获无法在数组中发送的帐户:

def process_email(delivery_method_name)
  begin
    Account::Access.new(account).spam! if delivery_method_name == 'mark_as_spam'
    AccountMailer.send("#{delivery_method_name}", account).deliver_now
  rescue
    @first_notification_error << account.id
    @second_notification_failure << account.id
    @third_notification_failure << account.id
    @fourth_notification_error << account.id
    @fourth_notification_failure << account.id
    return
  end
  update_reverification_fields
end

因此,在我的test.rb文件中,我希望能够测试account.id是否被@first_notification_error和其他容器捕获。虽然如何做到这一点并不完全清楚。我在另一篇文章中读到了将此代码放在development.rb和/或test.rb config.action_mailer.raise_delivery_errors = true中,但我认为这不是我想要的。有没有办法可以在我的测试中引发错误,可能是使用存根或类似的东西?

1 个答案:

答案 0 :(得分:0)

你需要模仿AccountMailer。在调用您正在测试的代码之前放置此行:

delivery_method = 'some method on mailer that you want to mock'
allow(AccountMailer).to receive(delivery_method).and_raise("boom")