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.