gpt4 book ai didi

ruby-on-rails - 如何为邮件拦截器编写 RSpec?

转载 作者:行者123 更新时间:2023-12-03 14:57:49 25 4
gpt4 key购买 nike

我正在使用邮件拦截器,如下所示:

setup_mail.rb

Mail.register_interceptor(MailInterceptor) if Rails.env != "production" 

类邮件拦截器
class MailInterceptor  
def self.delivering_email(message)
message.subject = "#{message.subject} [#{message.to}]"
message.to = "xxxxx@xxxxxx.com"
end
end

我无法为这个拦截器创建一个 rspec,因为它不会发生在 rake 规范中。

我有以下规范:
  describe "MailInterceptor" do 
it "should be intercepted" do
@email = UserMailer.registration_automatically_generated(@user)
@email.should deliver_to("xxxxx@xxxxxx.com")
end
end

在 test.log 中,我看到 Deliver_to 不是拦截器。关于如何为拦截器编写 rspec 的任何想法?

谢谢

最佳答案

deliver_to 的 email_spec 匹配器实际上并没有通过典型的传递方法运行邮件消息,它 simply inspects the message发送给谁。

要测试您的拦截器,您可以直接调用 delivery_email 方法

it 'should change email address wen interceptor is run' do
email = UserMailer.registration_automatically_generated(@user)
MailInterceptor.delivering_email(email)
email.should deliver_to('xxxxx@xxxxxx.com')
end

另一种选择是让邮件正常发送,并使用 email_spec 的 last_email_sent 测试它是否发送到了正确的地方。
it 'should intercept delivery' do
reset_mailer
UserMailer.registration_automatically_generated(@user).deliver
last_email_sent.should deliver_to('xxxxx@xxxxxx.com')
end

使用这两个测试可能是个好主意,首先要确保 MailInterceptor正在按照您的预期更改消息。第二个测试更像是一个集成测试,测试 MailInterceptor连接到传送系统。

关于ruby-on-rails - 如何为邮件拦截器编写 RSpec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7639415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com