[RUBY] [RSpec] Ich habe einen Test zum Hochladen eines Profilbilds geschrieben.

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】

Testcode

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.) スクリーンショット 2020-10-05 231134.png

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.

Vielen Dank für das Lesen bis zum Ende!

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

[RSpec] Ich habe einen Test zum Hochladen eines Profilbilds geschrieben.
Ich habe ein Programm zur Beurteilung von Primzahlen in Java geschrieben
Ich habe ein Docker-Image für die japanische Version von SDAPS erstellt
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Ich habe einen Testcode (Junit & mockit) für den Code geschrieben, der die AWS-API (Java) aufruft.
Ich habe einen CRUD-Test mit SpringBoot + MyBatis + DBUnit geschrieben (Teil 1)
Ich habe Randoop untersucht, einen JUnit-Testklassengenerator für Java.
Bild-Upload mit CarrierWave ~ Rspec-Test ~
Erstellen Sie ein Eltern-Kind-Beziehungsformular mit form_object (ich habe auch einen Test geschrieben)
[Rspec] Ablauf von der Einführung von Rspec bis zum Schreiben von Unit-Test-Code für das Modell
Ich möchte einen Unit Test schreiben!
Ich habe ein Plug-In für IntelliJ IDEA erstellt
[RSpec] Was ich feststeckte, als ich den Mailer-Test (Passwort-Reset-Prozess) schrieb
Ich habe ein Diff-Tool für Java-Dateien erstellt
Ich habe ein Programm zur Beurteilung von Primzahlen in Java erstellt
[Für Anfänger] Testen Sie die Benutzerregistrierung bei RSpec
Einführung in Rspec, ein Testframework für Ruby on Rails
Ich habe ein Primfaktorisierungsprogramm in Java geschrieben
[Von 100 Punkten] Ich dachte über einen Codierungstest für Programmierschulabsolventen nach [Ruby]