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!
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.
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
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