[RUBY] [RSpec] J'ai écrit un test pour télécharger une image de profil.

L'application Rails que je développe actuellement a une fonction qui permet à l'utilisateur de définir une image de profil. Cette fois, j'ai écrit un test pour voir si la fonction fonctionne correctement, alors veuillez vous y référer si vous le souhaitez!

【environnement】

Code de test

Nous testons avec les spécifications du système.

spec/system/upload_avatar_spec.rb



require 'rails_helper'

RSpec.describe'UploadImage', type: :system do
  let(:user) { FactoryBot.create(:user) }
  let(:item) { FactoryBot.create(:item, user_id: user.id) }

  #Télécharger et enregistrer des images
  def upload_user_avatar(user)
    valid_login(user)
    visit edit_user_path(user)
    attach_file 'user_avatar', "#{Rails.root}/spec/fixtures/images/test.jpg "
    click_on 'enregistrer'
  end

  it 'user successfully upload image user#show' do
    upload_user_avatar(user)
    expect(page).to have_selector("img[src$='test.jpg']")
  end

  it 'user successfully upload image on item#show' do
    upload_user_avatar(user)
    visit item_path(item)
    expect(page).to have_selector("img[src$='test.jpg']")
  end
end

La méthode valid_login est définie dans spec / support / login_support.rb```. Les méthodes définies dans ce dossier peuvent être appelées lors des tests. J'écris ce code car mon application n'autorise l'accès à edit_user_path que lorsque je suis connecté. Si vous ne l'écrivez pas, il échouera. (Je dois échouer)

spec/support/login_support.rb



module LoginSupport
  def valid_login(user)
    visit root_path
    click_link 'S'identifier'
    fill_in 'session[email]', with: user.email
    fill_in 'session[password]', with: user.password
    click_button 'S'identifier'
  end
end

Je vais expliquer dans l'ordre. Tout d'abord, ** FactoryBot ** génère des données de test pour l'utilisateur et l'élément. (Il est nécessaire de définir à l'avance les données de test dans `` spec / factries / ''. Je vais l'omettre ici.)

Le fait de télécharger une image est commun à tous les blocs, il est donc défini collectivement comme la méthode upload_user_avatar. Dans cette méthode, vous vous connectez, accédez à la page d'édition de l'utilisateur et utilisez la méthode attach_file pour télécharger et enregistrer les données d'image de test. Vous devez préparer les images de test dans / spec / fixtures / images / '' à l'avance. De plus, j'ai spécifié l'id de la balise d'entrée générée par f.file_field comme argument de la méthode attach_file et cela a fonctionné! (Voir l'image. Vous pouvez vérifier le code HTML généré à partir des outils de développement.) スクリーンショット 2020-10-05 231134.png

Nous faisons deux tests cette fois.

Tout d'abord, lorsque l'image est téléchargée, il vérifie si les données d'image se trouvent dans la destination de redirection spécifiée par le contrôleur. J'utilise have_selector pour vérifier si les données d'image de test.jpg sont incluses dans l'attribut src de la balise img.

Le second est presque le même. Puisque la même image est également utilisée sur la page de détail de l'article, je vais à la page de détail de l'article et j'utilise have_selector pour vérifier si l'attribut src de la balise img contient les données d'image de test.jpg.

Merci d'avoir lu jusqu'au bout!

Je sort ce que j'ai appris tous les jours! !! Si vous avez des impressions ou des suggestions, je vous serais reconnaissant de bien vouloir commenter! !!

Recommended Posts

[RSpec] J'ai écrit un test pour télécharger une image de profil.
J'ai écrit un programme de jugement des nombres premiers en Java
J'ai créé une image Docker pour la version japonaise de SDAPS
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
J'ai écrit un code de test (Junit & mockit) pour le code qui appelle l'API AWS (Java)
J'ai écrit un test CRUD avec SpringBoot + MyBatis + DBUnit (Partie 1)
J'ai étudié Randoop, un générateur de classe de test JUnit pour Java.
Téléchargement d'images à l'aide de CarrierWave ~ Test Rspec ~
Créer un formulaire de relation parent-enfant avec form_object (j'ai également écrit un test)
[Rspec] Flux de l'introduction de Rspec à l'écriture du code de test unitaire pour le modèle
Je veux écrire un test unitaire!
J'ai créé un plug-in pour IntelliJ IDEA
[RSpec] Ce que je suis resté bloqué lorsque j'ai écrit le test du mailer (processus de réinitialisation du mot de passe)
J'ai créé un outil Diff pour les fichiers Java
J'ai créé un programme de jugement des nombres premiers en Java
[Pour les débutants] Testez l'enregistrement des utilisateurs avec RSpec
Présentation de Rspec, un framework de test pour Ruby on Rails
J'ai écrit un programme de factorisation prime en Java
[Sur 100 points] J'ai pensé à un test de codage pour les diplômés des écoles de programmation [Ruby]