Die Rails-App, die ich gerade entwickle, verfügt über eine Funktion, mit der der Benutzer ein Profilbild festlegen kann. Dieses Mal habe ich einen Test geschrieben, um zu sehen, ob die Funktion ordnungsgemäß funktioniert. Bitte lesen Sie ihn, wenn Sie möchten!
【Umgebung】
Wir testen mit Systemspezifikationen.
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) }
#Bilder hochladen und speichern
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 'sparen'
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
Die valid_login-Methode ist in `` `spec / support / login_support.rb``` definiert. Die in diesem Ordner definierten Methoden können während des Tests aufgerufen werden. Ich schreibe diesen Code, weil meine App nur dann Zugriff auf edit_user_path zulässt, wenn ich angemeldet bin. Wenn Sie es nicht schreiben, schlägt es fehl. (Ich muss scheitern)
spec/support/login_support.rb
module LoginSupport
def valid_login(user)
visit root_path
click_link 'Einloggen'
fill_in 'session[email]', with: user.email
fill_in 'session[password]', with: user.password
click_button 'Einloggen'
end
end
Ich werde in der Reihenfolge erklären.
Zunächst generiert ** FactoryBot ** Testdaten für Benutzer und Artikel.
(Es ist notwendig, die Testdaten im Voraus in `spec / factries /`
zu definieren. Ich werde sie hier weglassen.)
Das Hochladen eines Bildes ist allen Blöcken gemeinsam und wird daher gemeinsam als upload_user_avatar-Methode definiert.
Bei dieser Methode melden Sie sich an, rufen die Bearbeitungsseite des Benutzers auf und verwenden die Methode attach_file, um die Testbilddaten hochzuladen und zu speichern.
Sie müssen Testbilder im Voraus in `/ spec / fixtures / images /`
vorbereiten.
Außerdem habe ich die ID des von f.file_field generierten Eingabe-Tags als Argument der Methode attach_file angegeben und es hat funktioniert! (Siehe Bild. Sie können den generierten HTML-Code in den Entwicklertools überprüfen.)
Diesmal machen wir zwei Tests.
Beim Hochladen des Bildes wird zunächst geprüft, ob sich die Bilddaten in dem vom Controller angegebenen Umleitungsziel befinden. Ich verwende have_selector, um zu überprüfen, ob die Bilddaten von test.jpg im src-Attribut des img-Tags enthalten sind.
Der zweite ist fast der gleiche. Da dasselbe Bild auch auf der Post-Detail-Seite verwendet wird, gehe ich zur Post-Detail-Seite und überprüfe mit have_selector, ob das src-Attribut des img-Tags die Bilddaten von test.jpg enthält.
Ich gebe aus, was ich jeden Tag gelernt habe! !! Wenn Sie Eindrücke oder Vorschläge haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten! !!
Recommended Posts