RSpec自動テスト時に画像を添付する
単体テストの時
単体テスト時はrack-testというGemを使うことで、添付される側のレコードに対してファイル添付できます。
FactoryBotと一緒に使用した例
FactoryBot.define do factory :item do association :user name { Faker::Lorem.word } #省略 image { Rack::Test::UploadedFile.new(File.join(Rails.root, 'public/images/test_image.jpg')) } end end
結合テストの時
結合テストの時は、ファイルパスを画面のフォームに渡すことでアップロードできます。
完成形
# 添付する画像を定義する image_path = Rails.root.join('public/images/test_image.png') # 画像選択フォームに画像を添付する attach_file('message[image]', image_path, make_visible: true)
[補足1]画像ファイルの絶対パス生成
Rails.root
アプリケーションの、コンピュータ内での絶対パスを取得できる
.join
文字列を組み合わせる
Rails.root.join
ex)画像ファイルまでの絶対パスを生成する
例えばRails.root
メソッドの戻り値が
"/Users/taro/projects/chat_app"
だった場合、
Rails.root.join('public/images/test_image.png')
の戻り値は
"/Users/taro/projects/chat_app/public/images/test_image.png"
となる。
[補足2]attach_fileメソッド
引数 | 内容 |
---|---|
第一引数 | ファイル添付を可能とするinput要素を指定 |
第二引数 | アップロードするファイルのパスを指定 |
第三引数以降 | オプションなど。ex) hiddenな要素に対するmake_visible: true |