Как написать rspec mock для метода, который вызывает почтовую программу в rails 5 - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь протестировать метод почтовой программы из моей конечной точки, который выглядит следующим образом:

ConfirmationMailer.send_email(email).deliver_later

И соответствующая спецификация выглядит следующим образом:

let(:confirmation_mailer_stub) { instance_double ConfirmationMailer }

before do
  allow(ConfirmationMailer).to receive(:send_email)
end

it 'sends confirmation email' do
  call_endpoint
  expect(confirmation_mailer_stub).to change { ActionMailer::Base.deliveries.count }.by(1)
end

Но яполучено сообщение об ошибке:

NoMethodError: неопределенный метод `delivery_later 'для nil: NilClass

Метод send_email довольно прост:

def send_email(email)
  mail(to: email, cc: email)
end

Как я могу проверить этот метод?

1 Ответ

0 голосов
/ 06 ноября 2019

Вы ввели send_email в ConfirmationMailer, не указав никакого значения, которое будет возвращено:

before do
  allow(ConfirmationMailer).to receive(:send_email)
end

Вам необходимо определить значение, возвращаемое методом-заглушкой (с #and_return) или вызовите оригинал : перед тем, как разрешить (ConfirmationMailer). получать (: send_email) .and_call_original end

Тем не менее, я думаю, что это не лучший способ проверить, отправлено ли письмо. Лучше воспользуйтесь советом этого ответа : настройте config.action_mailer.delivery_method = :test и подтвердите глобальный массив ActionMailer::Base.deliveries.

...