Rails 4 ActionMailer Mengirim Email Dengan Nama tidak berfungsi seperti yang diharapkan

Saya mengalami masalah dalam menguji mailer saya. Tampaknya menetapkan atribut [:to, :from, :reply_to] dengan email dalam format yang dijelaskan sebagai email-dengan-nama tidak berfungsi.

Berikut adalah contoh sederhana.

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

pesan_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

Hasil tesnya semua sama

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 ==)

Adakah yang tahu cara menetapkan [ke:, dari:, reply_to:] dalam format email dengan nama?

Apakah saya melewatkan sesuatu?

Apakah ada metode berbeda yang menyimpan header email yang dapat saya uji?


person Aaron Renoir    schedule 22.09.2013    source sumber


Jawaban (2)


Oke, saya mendapatkannya dengan menguji hash header email.

Ini adalah cara menguji nilai 'from', 'reply_to' dan 'to' di 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
Masih diperlukan di Rails5. Aneh. - person Sebastian Roth; 29.03.2017

* Pembaruan:

Tanda kurung siku yang Anda dapatkan menunjukkan bahwa Anda menerima sebuah array. Jadi, Anda perlu mengekstrak nilai dari array untuk memverifikasi validitasnya. Alasannya adalah Anda dapat memiliki banyak penerima, jadi misalnya objek dapat mengembalikan: ["Aaron Test ", "Renoir "]


Sejauh yang saya mengerti, Anda tidak perlu menggunakan tanda kurung siku, dan Anda tidak perlu menyertakan tanda kutip di string.

Ini seharusnya berfungsi:

from: "Aaron Test <[email protected]>",
reply_to: "Aaron Test <[email protected]>"
person frandroid    schedule 23.09.2013
comment
Saya setuju, itu seharusnya berhasil. Saya mencoba 3 cara berbeda dan hasil tesnya sama. Saya kira ada metode lain yang perlu saya uji. Mungkin merender tampilan email dan mengurai header. - person Aaron Renoir; 24.09.2013
comment
tidak, itu tidak berhasil. Saya memposting jawaban yang menunjukkan cara menguji nilai header. - person Aaron Renoir; 02.10.2013