Как написать RSpec для перехватчика почты?
Я использую перехватчик почты следующим образом:
setup_mail.rb
Mail.register_interceptor(MailInterceptor) if Rails.env != "production"
класс MailInterceptor
class MailInterceptor
def self.delivering_email(message)
message.subject = "#{message.subject} [#{message.to}]"
message.to = "xxxxx@xxxxxx.com"
end
end
Я не могу создать rspec для этого перехватчика, поскольку это не происходит с rake spec.
У меня есть следующие спецификации:
describe "MailInterceptor" do
it "should be intercepted" do
@email = UserMailer.registration_automatically_generated(@user)
@email.should deliver_to("xxxxx@xxxxxx.com")
end
end
В test.log я вижу, что delivery_to не является перехватчиком. Любые идеи о том, как я могу написать rspec для перехватчика?
Спасибо
1 ответ
Соответствие email_spec для deliver_to
на самом деле почтовое сообщение не запускается с помощью обычных методов доставки, оно просто проверяет, кому оно отправлено.
Чтобы проверить ваш перехватчик, вы можете напрямую вызвать метод deliverying_email.
it 'should change email address wen interceptor is run' do
email = UserMailer.registration_automatically_generated(@user)
MailInterceptor.delivering_email(email)
email.should deliver_to('xxxxx@xxxxxx.com')
end
Другой вариант - доставить сообщение как обычно и проверить, что оно было отправлено в нужное место с помощью email_spec. last_email_sent
it 'should intercept delivery' do
reset_mailer
UserMailer.registration_automatically_generated(@user).deliver
last_email_sent.should deliver_to('xxxxx@xxxxxx.com')
end
Возможно, было бы неплохо использовать оба теста, первый, чтобы убедиться, что MailInterceptor
изменяет сообщение, как вы ожидаете. Второй тест - это скорее интеграционный тест, MailInterceptor
подключен к системе доставки.