carrierwaveを使った画像投稿のテストをする方法を学んだので、アウトプットします。
なお、テストを行うにあたり、RSpecというRailsのテストコードを書くために用いられるGemを導入しています。
動作環境
・Mac OS Big Sur 11.2
・Ruby 2.6.5
・Rails 6.0.0
carrierwaveとは
carrierwaveとは、ファイルのアップロード機能を簡単に追加する事が出来るRubyのgemです。
アップロードしたファイルの保存先はデフォルトでpublic/uploadsに設定されており、Amazon S3など外部のストレージにも設定することができるそうです。
carrierwaveのインストールとその使い方については以下の記事を参考にしました。
https://qiita.com/ttaka66/items/264dcb85e41f9135685c
FactoryBotの記述
デストで使用するインスタンスの情報を予め設定することができる、FactoryBotというgemを使い、事前に用意した画像をセットする形でテストの実施をします。
FactoryBotの詳しい内容については、以下の記事が分かりやすいです。
https://qiita.com/morrr/items/f1d3ac46b029ccddd017
FactoryBot.define do
factory :user do
email {Faker::Internet.free_email}
password {'1a' + Faker::Internet.password(min_length: 6)}
password_confirmation {password}
last_name {'sato'}
first_name {'taro'}
self_introduction {'Hello. How are you?'}
image {Rack::Test::UploadedFile.new(File.join(Rails.root, 'public/images/human6.jpeg'), 'public/images/human6.jpeg')} ← ここで画像をセットしている
end
end
今回は、public配下にあるimagesフォルダの中にhuman6.jpegという画像ファイルを用意しています。
画像の情報として、Rack::Test::UploadedFileを指定すると、railsでは画像として認識してくれます。
それに続くFile.join(Rails.root〜~) の部分で画像のパスを指定しています。
後から知ったことですが、File.join(Rails.root〜の部分は、Rails.root.joinという形で簡略化して書いても問題ないようです。
まとめ
今回はローカル環境でのテストを学びましたが、Amazon S3などの外部ストレージサービスを利用する場合は他の設定も必要になるようなので、近々学びたいと思っています。
また、2018年から出てきたActive Storageというgemも画像アップロード機能を手軽にできるものなので、両方使えるようにしておくと今後便利かなと感じました。