Lim*_*oon 16 rspec ruby-on-rails rspec-rails sendgrid ruby-on-rails-3.1
我在我的Rails应用程序中使用SendGrid的SMTP API来发送电子邮件.但是,我遇到了使用RSpec测试电子邮件标题("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"]}>>
Run Code Online (Sandbox Code Playgroud)
这是我的规范代码(失败):
ActionMailer::Base.deliveries.last.to.should include("foo@bar.com")
Run Code Online (Sandbox Code Playgroud)
我也尝试了各种方法来检索标题("X-SMTPAPI")并且也没有工作:
mail = ActionMailer::Base.deliveries.last
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String
Run Code Online (Sandbox Code Playgroud)
救命?
事实证明,我可以这样做来检索电子邮件标题的值:
mail.header['X-SMTPAPI'].value
Run Code Online (Sandbox Code Playgroud)
但是,返回的值是JSON格式.然后,我需要做的就是解码它:
sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value)
Run Code Online (Sandbox Code Playgroud)
返回一个哈希,我可以这样做:
sendgrid_header["to"]
Run Code Online (Sandbox Code Playgroud)
检索电子邮件地址数组.
Fre*_*ung 11
email_spec gem有一堆匹配器使这更容易,你可以做的事情
mail.should have_header('X-SMTPAPI', some_value)
mail.should deliver_to('foo@bar.com')
Run Code Online (Sandbox Code Playgroud)
如果您不想使用它,那么仔细阅读该宝石的来源应该指向正确的方向
mail.to.addrs
Run Code Online (Sandbox Code Playgroud)
返回电子邮件地址(而不是'Bob'之类的东西)
和
mail.header['foo']
Run Code Online (Sandbox Code Playgroud)
获取foo标题的字段(取决于您要检查的内容,您可能要调用to_s它来获取实际的字段值)
| 归档时间: |
|
| 查看次数: |
3455 次 |
| 最近记录: |