Récemment, je me suis habitué à RSpec et j'ai été alerte, mais j'ai une erreur que je n'ai jamais vue, et je suis un peu coincé, alors j'aimerais la partager ici. C'est l'histoire quand j'ai écrit un test de mailer (processus de réinitialisation de mot de passe) dans les spécifications de la demande!
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
(réduction)
+L2E+CgogIDwvYm9keT4KPC9odG1sPgo=
+
+----==_mimepart_5b18de57c36e0_75293fd69de666b8448c9--
J'ai eu une erreur comme celle-ci. Apparemment, RSpec n'encode pas correctement le corps de l'e-mail, donc le test échoue car il ne correspond pas à la valeur attendue.
Lorsque j'ai créé le jeton de réinitialisation de mot de passe, il a été encodé en Base64, je l'ai donc remis et comparé. (Décoder)
password_resets_request_spec.rb
RSpec.describe UserMailer, type: :mailer do
let(:user) { FactoryBot.create(:user, email: '[email protected]') }
describe "Processus de réinitialisation du mot de passe" do
let(:mail) { UserMailer.password_reset(user) }
#Décoder et comparer l'encodage Base64
let(:mail_body) { mail.body.encoded.split(/\r\n/).map{|i| Base64.decode64(i)}.join }
it "L'en-tête s'affiche correctement" 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 "Réinitialisation du mot de passe"
end
#Test d'aperçu des e-mails
it "Le texte de l'e-mail s'affiche correctement" 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
En fait, il m'a fallu un certain temps pour accéder à ces informations, alors je les ai écrites sous forme d'article.
J'espère que vous pourrez aider ceux qui sont en difficulté au même endroit! Si vous avez des suggestions, je vous serais reconnaissant de bien vouloir commenter.
Recommended Posts