[RUBY] Komponententest unter Active Storage-Installationsumgebung

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

Der Test des Hauptfachs

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 ②.

Methode fixture_file_upload

Methode fixture_file_upload

Methode fixture_file_upload

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.

Recommended Posts

Komponententest unter Active Storage-Installationsumgebung
Führen Sie Active Storage ein
Informationen zu DelegationError (Active Storage)
Handbuch zur Initialisierung des aktiven Speichers
[Ralis] Über Unit Test
[Anfänger] Über Active Storage
Java Unit Test mit Mockito