2011-12-20 16 views
14

Sto utilizzando Send2Dir SMTP API nella mia applicazione Rails per inviare e-mail. Tuttavia, sto incontrando problemi nell'intestazione dell'e-mail ("X-SMTPAPI") usando RSpec.Come testare le intestazioni delle e-mail usando RSpec

Ecco cosa l'email si presenta come (recuperando da ActionMailer :: Base.deliveries):

#<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]"]}>> 

Ecco il mio codice spec (che non):

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

Ho anche provato vari metodo per recuperare l'intestazione ("X-SMTPAPI") e non ha funzionato neanche:

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

Aiuto?

Update (risposta)

scopre, posso fare questo per recuperare il valore dell'intestazione e-mail:

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

Tuttavia, il valore restituito è in formato JSON. Poi, tutto quello che devo fare è di decodificarlo:

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

che restituisce un hash, dove posso fare questo:

sendgrid_header["to"] 

per recuperare la matrice di indirizzi di posta elettronica.

risposta

9

La gemma email_spec ha un mucchio di matchers che rendono questo più facile, è possibile fare cose come

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

E indagando la fonte di quella gemma dovrebbe puntare nella giusta direzione se non si vuole usalo ad es

mail.to.addrs 

rendimenti voi gli indirizzi email (al contrario di cose del genere 'Bob')

e

mail.header['foo'] 

si ottiene il campo per l'intestazione foo (a seconda di cosa si sta controllando potresti voler chiamare to_s per ottenere il valore reale del campo)

+0

Grazie. Ho controllato la gemma email_spec. Il matcher "deliver_to" è simile al matcher "to" (che restituisce "[email protected]" invece di "[email protected]") e il matcher "have_header" restituisce semplicemente l'intestazione completa. Ad ogni modo, ho trovato una soluzione e la pubblicherò ora. Grazie! –

Problemi correlati