我正在尝试编写一个rspec测试,该测试将使用我的ActionMailer自定义投放方式发送电子邮件。
我的自定义投放方式实施:
class MyCustomDeliveryMethod
def deliver!(message)
puts 'Custom deliver for message: ' + message.to_s
...
end
Rspec代码:
it "should send an email" do
WebMock.allow_net_connect!
ActionMailer::Base.add_delivery_method( :api, MyCustomDeliveryMethod)
ActionMailer::Base.perform_deliveries = true
puts 'expecting this to call my custom delivery method'
ActionMailer::Base.mail( :to => 'me@example.com',
:subject => 'here is a test subject sent by ActionMailer',
:body => 'here is a test body sent by <i>ActionMailer</i>',
:delivery_method => :api
)
end
test.rb
config.action_mailer.delivery_method = :api
但是我从来没有看到过定制的&#39;串。我的其他测试运行了类的其他方法,它只是触发deliver!()方法不起作用。我错过了什么?
(注意:有一些使用rspec测试ActionMailers的例子,但是它们似乎是指模仿邮件程序行为,这不是我想要的 - 我希望实际的电子邮件能够用完。)
答案 0 :(得分:1)
我不太确定,但我认为问题是你的MyCustomMailer
类不是从ActionMailer::Base
继承的。
检查this个文档
此处ApplicationMailer
继承自ActionMailer::Base
,用于设置一些默认值。
实际的邮件程序类UserMailer
继承自ApplicationMailer
如果你愿意,你可以跳过额外的课程并直接继承,即
class MyCustomMailer < ActionMailer::Base
...
end
答案 1 :(得分:0)
到最后到达那里。缺少两件事:
自定义传递类必须定义一个带有一个参数的初始化方法。 e.g。
def initialize(it)
end
您需要.deliver_now
邮件才能触发邮件,因此完整的调用代码就是这样。
it "should send an email" do
WebMock.allow_net_connect!
ActionMailer::Base.add_delivery_method( :api, MyCustomDeliveryMethod)
ActionMailer::Base.perform_deliveries = true
puts 'expecting this to call my custom delivery method'
ActionMailer::Base.mail( :to => 'me@example.com',
:subject => 'here is a test subject sent by ActionMailer',
:body => 'here is a test body sent by <i>ActionMailer</i>',
:delivery_method => :api
).deliver_now
end