[RUBY] [RSpec] Was ich feststeckte, als ich den Mailer-Test (Passwort-Reset-Prozess) schrieb

Vor kurzem habe ich mich an RSpec gewöhnt und war wachsam, aber ich habe einen Fehler, den ich noch nie gesehen habe, und ich stecke ein wenig fest, deshalb möchte ich ihn hier teilen. Dies ist die Geschichte, als ich einen Mailer-Test (Prozess zum Zurücksetzen des Passworts) in die Anforderungsspezifikationen schrieb!

Fehlerinhalt


 Failure/Error: expect(mail.body.encoded).to match user.reset_token

       expected "\r\n----==_mimepart_5b18de57c36e0_75293fd69de666b8448c9\r\nContent-Type: text/plain;\r\n charset=UTF...\nL2E+CgogIDwvYm9keT4KPC9odG1sPgo=\r\n\r\n----==_mimepart_5b18de57c36e0_75293fd69de666b8448c9--\r\n" to match "HAY"
       Diff:
       @@ -1,2 +1,32 @@
       -HAY
       +
       +----==_mimepart_5b18de57c36e0_75293fd69de666b8448c9
       +Content-Type: text/plain;
       + charset=UTF-8
       +Content-Transfer-Encoding: base64
       +
       +SEFZCuOBggoK
       +
       +----==_mimepart_5b18de57c36e0_75293fd69de666b8448c9
       +Content-Type: text/html;
       + charset=UTF-8
       +Content-Transfer-Encoding: base64
       +
       +PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgaHR0
       (Kürzung)
       +L2E+CgogIDwvYm9keT4KPC9odG1sPgo=
       +
       +----==_mimepart_5b18de57c36e0_75293fd69de666b8448c9--

Ich habe so einen Fehler bekommen. Anscheinend codiert RSpec den E-Mail-Text nicht korrekt, sodass der Test fehlschlägt, weil er nicht mit dem erwarteten Wert übereinstimmt.

Lösung

Als ich das Kennwort-Reset-Token erstellt habe, wurde es mit Base64 codiert, also habe ich es zurückgesetzt und verglichen. (Dekodieren)

password_resets_request_spec.rb


RSpec.describe UserMailer, type: :mailer do
  let(:user) { FactoryBot.create(:user, email: '[email protected]') }

  describe "Prozess zum Zurücksetzen des Passworts" do
    let(:mail) { UserMailer.password_reset(user) }
    #Decodieren und vergleichen Sie die Base64-Codierung
    let(:mail_body) { mail.body.encoded.split(/\r\n/).map{|i| Base64.decode64(i)}.join }

    it "Die Kopfzeile wird korrekt angezeigt" do
      user.reset_token = User.new_token
      expect(mail.to).to eq ["[email protected]"]
      expect(mail.from).to eq ["[email protected]"]
      expect(mail.subject).to eq "Passwort zurücksetzen"
    end

    #E-Mail-Vorschau-Test
    it "Der E-Mail-Text wird korrekt angezeigt" do
      user.reset_token = User.new_token
      expect(mail_body).to match user.reset_token
      expect(mail_body).to match CGI.escape(user.email)
    end
  end
end

Vielen Dank für das Lesen bis zum Ende!

Eigentlich habe ich eine Weile gebraucht, um an diese Informationen zu gelangen, also habe ich sie als Artikel geschrieben.

Ich hoffe, Sie können denen helfen, die am selben Ort in Schwierigkeiten sind! Wenn Sie Vorschläge haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

Recommended Posts

[RSpec] Was ich feststeckte, als ich den Mailer-Test (Passwort-Reset-Prozess) schrieb
Ich blieb beim Versuch von Volleys Synchronisationsprozess (Java) hängen.
[RSpec] Ich habe einen Test zum Hochladen eines Profilbilds geschrieben.
Worauf ich beim ActiveModel :: Serializer-Test gestoßen bin
[RSpec] Als ich die Ansichtsdatei getestet habe, die die Hilfsmethode verwendet hat, habe ich ActionView :: Template :: Error: erhalten. ..
Wovon ich bei der Einführung der JNI-Bibliothek süchtig war