[RUBY] Test unitaire sous l'environnement d'installation Active Storage

Tout d'abord, qu'est-ce que le stockage actif?

Une fonction pour télécharger des fichiers Si vous l'utilisez, vous pouvez facilement créer une fonction de publication d'image, etc. avec un formulaire. Vous pouvez également télécharger des fichiers sur le service de stockage cloud. C'est facile à faire.

Dans mon cas, je créais une application qui a une fonction pour télécharger des images, donc J'avais introduit Active Storage. En tant que fonctionnalité, il n'est pas nécessaire de préparer une colonne pour les images. Cette fois, avec cette fonctionnalité, il y a eu beaucoup d'erreurs ...

Le test du sujet principal

La cause de cette erreur est ① FactoryBot a créé des données d'image factices '' ② Dans spec.rb, la méthode fixture_file_upload n'a pas été utilisée ''

Les deux ci-dessus étaient les principales causes de l'erreur.

Surtout pour (2), je n'ai pas pu l'atteindre parce que j'étais juste en train d'enquêter sur le mauvais placement.


Puis à partir de ①.

Par exemple, si vous avez un modèle / table appelé produit

«Si vous n'utilisez pas Active Storage» Colonne d'image (colonne pour l'image) requise

«Si vous utilisez Active Storage» Pas besoin de colonne image (colonne pour image)

C'est vrai.

Si vous passez en revue la description de FactoryBot sur la base de ce qui précède

«Si vous n'utilisez pas Active Storage»

products.rb


FactoryBot.define do
  factory :product do
    image             { 'test_image.jpg' }
    name              { 'Lotion' }
    explanation       { 'C'est une bonne lotion' }
    price             { '2000' }
    user
  end
end

«Si vous utilisez Active Storage»

products.rb


FactoryBot.define do
  factory :product do
    name              { 'Lotion' }
    explanation       { 'C'est une bonne lotion' }
    price             { '2000' }
    user
  end
end

C'est naturel que cela arrive. Parce que dans l'environnement de stockage actif, vous n'avez pas besoin de la colonne d'image. (Je n'ai pas du tout remarqué ..)

Cette partie résolue (1).


Ensuite, passez à ②.

méthode fixture_file_upload

méthode fixture_file_upload

méthode fixture_file_upload

Je l'ai dit trois fois parce que c'est important. Cette méthode est fournie par RSpec.

Spec.rb lorsque le test n'a pas réussi du tout ↓↓↓↓

product_spec.rb


require 'rails_helper'


describe Product do

  describe '#create' do
    before do
      @product = build(:product)
    end


    
    # 1.Si l'image existe, vous pouvez vous inscrire
    it 'is valid with an image' do
      expect(@product).to be_valid
    end

    # 2.Ne peut pas être enregistré si le nom est vide
    it 'is invalid without a name' do
      @product.name = nil
      @product.valid?
      expect(@product.errors[:name]).to include('Entrez s'il vous plait')
    end

                        .
                        .
                        .
                        .
                        .

  end
end

Spéc.rb modifié ↓↓↓↓

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.Si l'image existe, vous pouvez vous inscrire
    it 'is valid with an image' do
      expect(@product).to be_valid
    end

    # 2.Ne peut pas être enregistré si le nom est vide
    it 'is invalid without a name' do
      @product.name = nil
      @product.valid?
      expect(@product.errors[:name]).to include('Entrez s'il vous plait')
    end

                        .
                        .
                        .
                        .
                        .

  end
end

fixture_file_upload("/files/test_image.jpg ") Qu'est-ce que cela signifie, mais Les images de test sont placées selon le répertoire ci-dessous.

spec
  ├ factories
  ├ fixtures
  │     └ files
  │         ├ test_image.jpg
  │         └ .keep
  ├ models
  :
  :

Rappelez (réservez) ceci entre avant la fin Il génère une image de test avant l'exécution du code de test.

Avec cela, ② est également résolu en toute sécurité.


C'était une cause qui n'aurait jamais été résolue, Il a fallu beaucoup de temps et d'énergie pour y arriver.

Je dois améliorer ma puissance de recherche ...

J'espère que cela sera utile pour ceux qui ne réussissent pas le test pour la même raison.

Recommended Posts

Test unitaire sous l'environnement d'installation Active Storage
Présentez le stockage actif
À propos de DelegError (Active Storage)
Manuel d'initialisation du stockage actif
[Ralis] À propos du test unitaire
[Débutant] À propos du stockage actif
Test unitaire Java avec Mockito