A_Modestov
@A_Modestov

Как протестировать вызов маилера?

Приветствую всех. Возник такой вопрос, нужно протестировать вызов метода на уровне контроллера:
ConfirmOauth.email_confirmation(user).deliver_now
Как реализовать это в случае с маилером, где вызывается сразу 2 метода? Следующие варианты, естественно, не проходят:
- expect(ConfirmOauth.email_confirmation(user)).to receive(:deliver_now)
- expect(ConfirmOauth).to receive(:email_confirmation).with(user)
  • Вопрос задан
  • 407 просмотров
Решения вопроса 1
let(:confirm_oauth) { double deliver_now: nil }
before do
  allow(ConfirmOauth).to receive(:email_confirmation)
    .and_return confirm_oauth
end
subject! { do_something_that_calls_mailer }

it do
  expect(ConfirmOauth).to have_received(:email_confirmation).with user
  expect(confirm_oauth).to have_received :deliver_now
end


Другой способ - это метод receive_message_chain https://relishapp.com/rspec/rspec-mocks/docs/worki... Он подойдёт, если не нужно проверять с какими параметрами были вызваны промежуточные методы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы