Я пытаюсь предотвратить случайные электронные письма для инвалидов. И я решил, что лучший способ сделать это - зарегистрировать перехватчик почты и подключиться к методу delivering_email
на этой странице https://edgeapi.rubyonrails.org/classes/ActionMailer/Base.html
Это код моего инициализатора (config/initializers/email_interceptor.rb
):
class EmailInterceptor
def self.delivering_email(message)
if User.where('email = ? AND disabled_at is not null', message.to).exists?
message.perform_deliveries = false
end
end
end
ActionMailer::Base.register_interceptor(EmailInterceptor)
Затем я пытаюсь добавить тесты в мое приложение, чтобы убедиться, что пользователи могут зарегистрироваться для начала, и вот как выглядит этот тест:
let(:from) { 'a@foo.com' }
let(:to) { 'b@foo.com' }
subject { ActionMailer::Base.mail(to: to, from: from).deliver }
it 'sends emails to non existing users' do
expect { subject }.to change(ActionMailer::Base.deliveries, :count)
end
Возникает ошибка:
Failure/Error: subject { ActionMailer::Base.mail(to: to, from: from).deliver }
ActionView::MissingTemplate:
Missing template action_mailer/base/mail with "mailer". Searched in:
* "action_mailer/base"
# ./spec/mailers/email_interceptor_spec.rb:6:in `block (2 levels) in <top (required)>'
Я что-то здесь не так делаю? Я использую рельсы 5.1.0
и мне интересно, изменился ли почтовый API или что-то в этом роде.