Was ist Active Storage?
Eine Funktion zum Hochladen von Dateien Wenn Sie dies verwenden, können Sie einfach eine Bildposting-Funktion usw. mit einem Formular erstellen. Sie können auch Dateien in den Cloud-Speicherdienst hochladen. Es ist einfach zu machen.
In meinem Fall habe ich eine Anwendung erstellt, die eine Funktion zum Hochladen von Bildern hat Ich hatte Active Storage eingeführt. Als Feature ist es nicht erforderlich, eine Spalte für Bilder vorzubereiten. Dieses Mal gab es mit dieser Funktion viele Fehler ...
Die Ursache für diesen Fehler ist
① FactoryBot hat Dummy-Bilddaten erstellt
② In spec.rb wurde die Methode fixture_file_upload nicht verwendet
Die beiden oben genannten waren die Hauptursachen für den Fehler.
Speziell für (2) konnte ich es nicht erreichen, weil ich nur die Fehlplatzierung untersucht habe.
Dann von ①.
Zum Beispiel, wenn Sie ein Modell / eine Tabelle namens Produkt haben
Wenn Sie Active Storage nicht verwenden
Bildspalte (Spalte für Bild) erforderlich
Wenn Sie Active Storage verwenden
Keine Bildspalte erforderlich (Bildspalte)
Korrekt.
Wenn Sie die Beschreibung von FactoryBot anhand der obigen Angaben überprüfen
Wenn Sie Active Storage nicht verwenden
products.rb
FactoryBot.define do
factory :product do
image { 'test_image.jpg' }
name { 'Lotion' }
explanation { 'Es ist eine gute Lotion' }
price { '2000' }
user
end
end
Wenn Sie Active Storage verwenden
products.rb
FactoryBot.define do
factory :product do
name { 'Lotion' }
explanation { 'Es ist eine gute Lotion' }
price { '2000' }
user
end
end
Es ist natürlich, dass dies passiert. In der Active Storage-Umgebung benötigen Sie die Image-Spalte nicht. (Ich habe es überhaupt nicht bemerkt ..)
Dieser gelöste Teil (1).
Als nächstes wenden Sie sich an ②.
Ich habe es dreimal gesagt, weil es wichtig ist. Diese Methode wird von RSpec bereitgestellt.
Spec.rb wenn der Test überhaupt nicht bestanden wurde ↓ ↓ ↓ ↓
product_spec.rb
require 'rails_helper'
describe Product do
describe '#create' do
before do
@product = build(:product)
end
# 1.Wenn das Bild vorhanden ist, können Sie sich registrieren
it 'is valid with an image' do
expect(@product).to be_valid
end
# 2.Kann nicht registriert werden, wenn der Name leer ist
it 'is invalid without a name' do
@product.name = nil
@product.valid?
expect(@product.errors[:name]).to include('Bitte eingeben')
end
.
.
.
.
.
end
end
Geänderte Spezifikation.bb ↓↓↓↓
product_spec.rb
require 'rails_helper'
describe Product do
describe '#create' do
before do
@product = build(:item)
@product.image = fixture_file_upload("/files/test_image.jpg ")
end
# 1.Wenn das Bild vorhanden ist, können Sie sich registrieren
it 'is valid with an image' do
expect(@product).to be_valid
end
# 2.Kann nicht registriert werden, wenn der Name leer ist
it 'is invalid without a name' do
@product.name = nil
@product.valid?
expect(@product.errors[:name]).to include('Bitte eingeben')
end
.
.
.
.
.
end
end
fixture_file_upload("/files/test_image.jpg ")
Was bedeutet das aber?
Die Testbilder werden gemäß dem folgenden Verzeichnis platziert.
spec
├ factories
├ fixtures
│ └ files
│ ├ test_image.jpg
│ └ .keep
├ models
:
:
Rufen Sie dies zurück, bevor Sie es beenden. Es wird ein Testbild generiert, bevor der Testcode ausgeführt wird.
Damit ist ② auch sicher gelöst.
Es war eine Ursache, die niemals gelöst worden wäre, Es hat viel Zeit und Energie gekostet, um dorthin zu gelangen.
Ich muss meine Suchkraft verbessern ...
Ich hoffe, es ist hilfreich für diejenigen, die den Test aus demselben Grund nicht bestehen.