gpt4 book ai didi

ruby-on-rails - 如何使用 RSpec 测试电子邮件 header

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

我正在使用 SendGrid 的 SMTP API在我的 Rails 应用程序中发送电子邮件。但是,我在使用 RSpec 测试电子邮件 header (“X-SMTPAPI”)时遇到了麻烦。

这是电子邮件的样子(从 ActionMailer::Base.deliveries 检索):

#<Mail::Message:2189335760, Multipart: false, Headers: 
<Date: Tue, 20 Dec 2011 16:14:25 +0800>,
<From: "Acme Inc" <contact@acmeinc.com>>,
<To: doesntmatter@nowhere.com>,
<Message-ID: <4ef043e1b9490_4e4800eb1b095f1@Macbook.local.mail>>,
<Subject: Your Acme order>, <Mime-Version: 1.0>,
<Content-Type: text/plain>, <Content-Transfer-Encoding: 7bit>,
<X-SMTPAPI: {"sub":{"|last_name|":[Foo],"|first_name|":[Bar]},"to":["foo@bar.com"]}>>

这是我的规范代码(失败):
ActionMailer::Base.deliveries.last.to.should include("foo@bar.com")

我还尝试了各种方法来检索 header (“X-SMTPAPI”),但也没有用:
mail = ActionMailer::Base.deliveries.last
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String

帮助?

更新(答案)

事实证明,我可以这样做来检索电子邮件 header 的值:
mail.header['X-SMTPAPI'].value

但是,返回值是 JSON 格式。然后,我需要做的就是解码它:
sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value)

它返回一个哈希,我可以在其中执行此操作:
sendgrid_header["to"] 

检索电子邮件地址数组。

最佳答案

email_spec gem 有一堆匹配器可以让这更容易,你可以做类似的事情

mail.should have_header('X-SMTPAPI', some_value)
mail.should deliver_to('foo@bar.com')

如果您不想使用它,那么仔细阅读该 gem 的来源应该会为您指明正确的方向,例如
mail.to.addrs

返回您的电子邮件地址(而不是像“鲍勃”这样的东西)


mail.header['foo']

为您获取 foo header 的字段(取决于您正在检查的内容,您可能想要调用 to_s 以获取实际的字段值)

关于ruby-on-rails - 如何使用 RSpec 测试电子邮件 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572567/

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