[RUBY] [RSpec] Ce que je suis resté bloqué lorsque j'ai écrit le test du mailer (processus de réinitialisation du mot de passe)

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!

contenu de l'erreur


 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.

Solution

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

Merci d'avoir lu jusqu'au bout!

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

[RSpec] Ce que je suis resté bloqué lorsque j'ai écrit le test du mailer (processus de réinitialisation du mot de passe)
Je suis resté coincé en essayant le processus de synchronisation de Volley (Java)
[RSpec] J'ai écrit un test pour télécharger une image de profil.
Ce que je suis tombé sur le test ActiveModel :: Serializer
[RSpec] Lorsque j'ai testé le fichier de vue qui utilisait la méthode d'assistance, j'ai obtenu ActionView :: Template :: Error:. ..
Ce à quoi j'étais accro lors de l'introduction de la bibliothèque JNI