Как заглушить доставку Mailer в RSPEC - PullRequest
0 голосов
/ 26 октября 2018

Я хочу заблокировать отправку электронной почты и вернуть пример результата электронной почты для дальнейшей обработки.

Учитывая, что у меня есть:

message = GenericMailer.send_notification(id).deliver!

Я хочу сделать что-то вроде:

allow(GenericMailer).to receive_message_chain(:send_notification, :deliver)
   .and_return(mail_result_no_idea_what_is_like)

но вышеуказанная функция явно не работает, GenericMailer does not implement: deliver или доставить! как пытался.

Я хочу вернуть некоторые данные, так как мне нужно проверить что-то вроде (и больше):

message.header.select{|h| h.name == "Date"}.try(:first).try(:value).try(:to_datetime).try(:utc)

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Наконец-то придумали решение. Благодаря информации @LolWalid.

copy = double()
# recursive_ostruct_even_array is my method to convert hash/array to OpenStruct Obje
message = recursive_ostruct_even_array({
                                         "header" => [{"name" => "Date", "value" => Time.now.utc}],
                                         "to" => ["test@gmail.com"],
                                         "from" => ["from@gmail.com"],
                                         "subject" => "For Testing",
                                         "body" => "-"
                                       })
allow(GenericMailer).to receive(:send_notification).and_return(copy)
allow(copy).to receive(:deliver!).and_return(message)
0 голосов
/ 26 октября 2018

GenericMailer.send_notification возвращает объект класса ActionMailer::MessageDelivery

Пример с rails 5.1.4 и rspec 3.6.0

it 'delivers notification' do
  copy = double()
  expect(GenericMailer).to receive(:send_notification).and_return(copy)
  expect(copy).to receive(:deliver!) # You can use allow instead of expect
  GenericMailer.send_notification.deliver!
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...