Je suis un débutant Ruby qui crée des portefeuilles avec Ruby on Rails. Je pense que de nombreuses personnes ont implémenté la fonction de téléchargement d'images dans CarrierWave. Je suis également l'un d'entre eux. Cette gemme est utilisée pour les paramètres de l'avatar de l'utilisateur et la pièce jointe d'image au moment de la publication, et la fonction de téléchargement d'image de CarrierWave a été incluse pour confirmation dans divers tests.
Lors de la création du portfolio, après avoir exécuté le test plusieurs fois, quand je suis arrivé à regarder le dossier où les images sont enregistrées ... ** 600 dossiers! ?? ** **
Je ne l'ai pas remarqué du tout. Plus vous tournez le test, plus les images incluses dans le scénario de test seront téléchargées encore et encore. Avant de le savoir, mon dossier était serré avec une capacité d'image ...
Vous pouvez le désactiver manuellement, mais le test s'exécute chaque fois que vous refactorisez ou ajoutez une fonctionnalité, ce qui peut être assez ennuyeux. Donc, ** je vais le configurer pour effacer l'image de CarrierWave créée pour le test ** après avoir exécuté le test.
Je développe des rails en créant un conteneur dans Docker.
Docker for mac 2.3.0.4
Ruby on Rails 5.2.2
ruby 2.4.5
CarrierWave 2.1.0
Je me suis référé à la page suivante du wiki de CarrierWave How to: Cleanup after your Rspec tests
Tout en vous référant à cela, supprimez-le selon le flux suivant. ** 1. Spécifiez le dossier de téléchargement pour le test (fichier uploeader) ** ** 2. Effacez tous les dossiers avec le chemin spécifié après avoir exécuté le test rspec **
** 1. Spécifiez le dossier de téléchargement pendant le test ** Étant donné que certains fichiers de cache sont également générés (pendant le cas de test de vérification des erreurs) Spécifiez les dossiers de cache et de stockage.
app/uploaders/***_uploader.rb
:
#Spécifiez un dossier dans le cache
def cache_dir
if Rails.env.test?
"uploads/#{Rails.env}/tmp/#{mounted_as}/#{model.id}"
else
"uploads/tmp/#{mounted_as}/#{model.id}"
end
end
#Spécifiez le dossier du magasin
def store_dir
if Rails.env.test?
"uploads/#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
else
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
:
** 2. Effacez tous les dossiers avec le chemin spécifié après avoir exécuté le test rspec ** Écrivez un chemin pour supprimer le cache et stocker le dossier spécifié ci-dessus à la fois.
spec/spec_helper.rb
:
config.after(:all) do
if Rails.env.test?
FileUtils.rm_rf(Dir["#{Rails.root}/public/uploads/#{Rails.env}/"])
end
end
:
Cela supprimera automatiquement le dossier de test à chaque fois que vous exécuterez le test rspec.
J'ai exécuté le test plusieurs fois et maintenant je n'ai pas beaucoup de dossiers ou d'espace restreint, Impression que la vitesse de traitement de rspec a un peu ralenti car le processus d'effacement est entré dans le test. Cela ne peut pas être aidé, mais c'est une bonne idée de dire si vous avez vraiment besoin de télécharger des images pendant les tests, et sinon, envisagez de créer des usines sans images. Je voudrais également passer en revue les cas de test.
Recommended Posts