LoginSignup
1
1

More than 3 years have passed since last update.

Railsで画像アップロードのテスト

Posted at

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

spec/factories/user.rb
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も画像アップロード機能を手軽にできるものなので、両方使えるようにしておくと今後便利かなと感じました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1