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】
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.)
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.
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