[RUBY] Comment tester avec des images lors de l'utilisation d'ActiveStorage et de Faker

【Aperçu】

1. Conclusion </ b>

2. Pourquoi utiliser fixture_file_upload au lieu de créer une image avec Faker </ b>

3. Comment utiliser </ b>

4. Ce que j'ai appris d'ici </ b>

  1. Conclusion

Utilisez la méthode fixture_file_upload </ b>.


2. Pourquoi utiliser fixture_file_upload au lieu de créer une image avec Faker

Il y a une raison.

Étant donné qu'ActiveStorage est utilisé, la colonne d'image n'est pas créée. Par conséquent, il ne peut pas être créé avec Faker (même si une image concrète est insérée, elle ne peut pas être définie car spec / factories n'a pas de colonne d'image).

Même si je faisais une colonne d'images, je ne savais pas comment générer (récupérer) des images au hasard avec Faker. (Aucune fonctionnalité de ce type n'a été trouvée dans Faker sur Github.)


3. Comment utiliser

La réponse est simple, dans le fichier correspondant dans spec / models, Affectez simplement fixture_file_upload (le fichier image dans ce répertoire) à la variable d'instance. (Si vous programmez un exemple concret dans spec / usines sans utiliser Faker, ce sera une variable locale)

spec/models


require 'rails_helper'

RSpec.describe BuyItem, type: :model do
  describe '#create' do
    before do

      @buy_item = FactoryBot.build(:buy_item)
      @buy_item.image = fixture_file_upload('app/assets/images/aiueo.png')

    end
  end
end

Ce sera comme ça! Je n'ai pas programmé d'exemple concret dans spec / usines (j'utilise Faker et il n'y a pas de colonne d'image), donc j'ai mis une image concrète appropriée directement dans la variable d'instance. Ce faisant, l'erreur "L'image ne peut pas être vide" disparaît car l'image est placée directement dans "@buy_item".
5. Ce que j'ai appris d'ici (utilisé en cas d'erreur)

Même si j'utilise la gemme ActiveStorage, j'ai créé "image" dans le nom de la RAM. De plus, je ne savais pas comment créer une image avec Faker, j'ai donc supprimé le nom de la colonne. Après cela, à la suite de diverses recherches pour attribuer l'image à la variable d'instance sans compter sur Faker (image appropriée au lieu de générée aléatoirement), je suis arrivé à fixture_file_upload et j'ai été sauvé!

URL de référence: Tester le téléchargement du fichier à l'aide de rspec-rails

Recommended Posts