ruby-on-rails ruby-on-rails-3 rspec email-spec

ruby on rails - ¿Cómo escribir un RSpec para un interceptor de correo?



ruby-on-rails ruby-on-rails-3 (1)

Estoy usando un interceptor de correo de la siguiente manera:

setup_mail.rb

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

clase MailInterceptor

class MailInterceptor def self.delivering_email(message) message.subject = "#{message.subject} [#{message.to}]" message.to = "[email protected]" end end

No puedo crear un rspec para este interceptor ya que no ocurre con la especificación de rake.

Tengo las siguientes especificaciones:

describe "MailInterceptor" do it "should be intercepted" do @email = UserMailer.registration_automatically_generated(@user) @email.should deliver_to("[email protected]") end end

En el test.log veo que deliver_to no es el interceptor. ¿Alguna idea sobre cómo puedo escribir un rspec para el interceptor?

Gracias


El comparador email_spec para deliver_to realmente no ejecuta el mensaje de correo a través de los métodos de entrega típicos, simplemente inspecciona el mensaje para ver a quién se está enviando.

Para probar su interceptor, puede invocar el método deliver_email directamente

it ''should change email address wen interceptor is run'' do email = UserMailer.registration_automatically_generated(@user) MailInterceptor.delivering_email(email) email.should deliver_to(''[email protected]'') end

La otra opción es dejar que el mensaje se entregue normalmente y probar que se envió al lugar correcto mediante el correo electrónico de last_email_sent

it ''should intercept delivery'' do reset_mailer UserMailer.registration_automatically_generated(@user).deliver last_email_sent.should deliver_to(''[email protected]'') end

Podría ser una buena idea usar ambas pruebas, la primera para asegurarse de que MailInterceptor esté modificando el mensaje como cabría esperar. La segunda prueba es más que una prueba de integración, comprobando que MailInterceptor está conectado al sistema de entrega.