RSpec

2011-12-20 22 views
14

kullanarak e-posta başlıklarını sınama E-posta göndermek için Rails uygulamasında SendGrid'in SMTP API kullanıyorum. Ancak, RSpec kullanarak e-posta üstbilgisini ("X-SMTPAPI") sınama sorunlarına koşuyorum. İşte RSpec

eposta (ActionMailer :: Base.deliveries dan alınırken) gibi görünür:

ActionMailer::Base.deliveries.last.to.should include("[email protected]") 

Ben de çeşitli denedim:

#<Mail::Message:2189335760, Multipart: false, Headers: 
<Date: Tue, 20 Dec 2011 16:14:25 +0800>, 
<From: "Acme Inc" <[email protected]>>, 
<To: [email protected]>, 
<Message-ID: <[email protected]>>, 
<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":["[email protected]"]}>> 

İşte (başarısız) benim Spec kodu yöntem başlığı ("X-SMTPAPI") almak için ve ya işe yaramadı:

mail = ActionMailer::Base.deliveries.last 
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String 

Yardım?

çıkıyor

Güncelleme (cevap), ben e-posta başlığının değerini almak için bunu yapabilirsiniz:

mail.header['X-SMTPAPI'].value 

Ancak döndürülen değer JSON biçiminde olduğunu. Sonra ben tüm yapmanız gereken onu deşifre etmektir:

sendgrid_header["to"] 

e-posta adreslerinin dizi almak için:

sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value) 

bunu yapabilirim bir karma döndürür.

cevap

9

email_spec mücevher bunu kolaylaştırmak amacıyla

mail.should have_header('X-SMTPAPI', some_value) 
mail.should deliver_to('[email protected]') 

gibi şeyler yapabilir hale Ve istemiyorsanız eğer gem kaynağını incelerken doğru yönde işaret etmelidir matchers bir grup var onu kullan

ve

mail.header['foo'] 

foo başlığı için size alanını alır (kontrol ettiğiniz şeye bağlı ('Bob' gibi şeyler aksine)

mail.to.addrs 

döner size e-posta adresleri gerçek alan değerini elde etmek için to_s numarasını aramak isteyebilirsiniz)

+0

Teşekkürler. Email_spec gem'i kontrol ettim. "Delivery_to" eşleyicisi, "to" eşleştiricisine benzer ("[email protected]" yerine "[email protected]" değerini döndürür) ve "have_header" eşleştiricisi, tam üstbilgiyi döndürür. Her neyse, buna bir çözüm buldum ve şimdi yayınlayacağım. Teşekkürler! –