Rails 4 ActionMailer Отправка электронной почты с именем не работает должным образом

У меня возникли проблемы с тестированием моей почтовой программы. Появляется назначение атрибутов [:to, :from, :reply_to] электронной почте в формате, описанном как электронная почта с именем не работает.

Вот простой пример.

class MessageMailer < ActionMailer::Base
    def simple
      mail(
        from: "Aaron Test <[email protected]>",
        to: "Aaron Test <[email protected]>",
        reply_to: "Aaron Test <[email protected]>"
      )
    end
end

message_mailer_spec.rb

EXPECTED = "Aaron Test <[email protected]>"

describe MessageMailer do
  before do
    @email = MessageMailer.simple
  end

  it "expect `from` to eq #{EXPECTED}" do
    expect( @email.from ).to eq(EXPECTED)
  end

  it "expect `to` to eq #{EXPECTED}" do
    expect( @email.to ).to eq(EXPECTED)
  end

  it "expect `reply_to` to eq #{EXPECTED}" do
    expect( @email.reply_to ).to eq(EXPECTED)
  end
end

Результаты теста все те же

1) MessageMailer expect `reply_to` to eq Aaron Test <[email protected]>

  Failure/Error: expect( @email.reply_to ).to eq(EXPECTED)

    expected: "Aaron Test <[email protected]>"
        got: ["[email protected]"]

   (compared using ==)

Кто-нибудь знает, как назначить [кому:, от:, answer_to:] в формате электронной почты с именем?

Я что-то упускаю?

Существуют ли различные методы хранения заголовков электронной почты, которые я могу протестировать?


person Aaron Renoir    schedule 22.09.2013    source источник


Ответы (2)


Хорошо, я получил это, проверив хэш заголовка электронной почты.

Вот как можно проверить значения «from», «reply_to» и «to» в rspec.

describe MessageMailer do
  before do
    @email = MessageMailer.simple
  end

  it "expect `from` to be formatted correctly" do
     expect( @email.header['From'].to_s ).to eq("Aaron Test <[email protected]>")
  end

  it "expect `reply_to` to be formatted correctly" do
     expect( @email.header['Reply-To'].to_s ).to eq("Aaron Test <[email protected]>")
  end

  it "expect `to` to be formatted correctly" do
     expect( @email.header['To'].to_s ).to eq("Aaron Test <[email protected]>")
  end
end
person Aaron Renoir    schedule 01.10.2013
comment
Все еще требуется в Rails5. Странный. - person Sebastian Roth; 29.03.2017

* Обновление:

Квадратные скобки, которые вы получаете, указывают на то, что вы получаете массив. Поэтому вам нужно извлечь значения из массива, чтобы проверить их достоверность. Причина этого в том, что у вас может быть несколько адресатов, поэтому, например, объект может возвращать: ["Тест Аарона", "Ренуар"]


Насколько я понимаю, вам не нужно использовать квадратные скобки, и вам не нужно включать кавычки в строку.

Они должны работать:

from: "Aaron Test <[email protected]>",
reply_to: "Aaron Test <[email protected]>"
person frandroid    schedule 23.09.2013
comment
Я согласен, это должно сработать. Я пробовал 3 разных способа, и результаты тестов одинаковы. Я предполагаю, что есть другой метод, который мне нужно проверить. Возможно, рендеринг представления электронной почты и анализ заголовка. - person Aaron Renoir; 24.09.2013
comment
нет, это не работает. Я опубликовал ответ, который показывает, как проверить значения заголовка. - person Aaron Renoir; 02.10.2013