Rails 4, RSpec 3.2 - 如何模拟 ActionMailer 的 Deliver_now 方法来引发异常
Posted
技术标签:
【中文标题】Rails 4, RSpec 3.2 - 如何模拟 ActionMailer 的 Deliver_now 方法来引发异常【英文标题】:Rails 4, RSpec 3.2 - how to mockup ActionMailer's deliver_now method to raise exceptions 【发布时间】:2015-07-11 05:56:16 【问题描述】:环境
Ruby 2.2.1、Rails 4.2.0、rspec-core 3.2.2、rspec-expectations 3.2.0、rspec-mocks 3.2.1、rspec-rails 3.2.1、rspec-support 3.2.2
我有以下方法
def send_event_alert_email(event_id)
event = Event.find_by(id: event_id)
...
...
...
EventAlertMailer.event_alert(event_id).deliver_now
create_alert(event)
end
我需要编写规范以确保create_alert(event)
在EventAlertMailer.event_alert(event_id).deliver_now
引发任何异常时不会被调用。所以基本问题是我如何模拟deliver_now
来引发它可能实际抛出的异常。
【问题讨论】:
【参考方案1】:这里是如何测试 deliver_now 方法:
describe EventAlertMailer do
it 'sends email' do
delivery = double
expect(delivery).to receive(:deliver_now).with(no_args)
expect(EventAlertMailer).to receive(:event_alert)
.with(event_id)
.and_return(delivery)
MyClass.send_event_alert_email
end
end
【讨论】:
以上是关于Rails 4, RSpec 3.2 - 如何模拟 ActionMailer 的 Deliver_now 方法来引发异常的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 rspec 测试 Cloudinary rails 和 Attachinary?
如何测试 belongs_to 与 Rails 6 和 RSpec 4.1 的关联?
如何在 rspec rails 请求测试中发布缺少authentity_token 的帖子?
使用Rspec存根和模拟在Rails Oauth中实现100%的测试覆盖率
devise 和 rspec-rails - 如何在请求类型规范(带有 type: :request 标记的规范)中登录用户?