Тест перехватчика электронной почты в Rails 5 - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь предотвратить случайные электронные письма для инвалидов. И я решил, что лучший способ сделать это - зарегистрировать перехватчик почты и подключиться к методу 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 или что-то в этом роде.

1 Ответ

1 голос
/ 14 мая 2019

Измените тему на:

subject do 
  ActionMailer::Base.mail(to: to, from: from, subject: 'test', body: 'test').deliver
end

Шаблон не используется.Есть и другие способы, это похоже на проблему, описанную здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...