ずみーBlog

元クラゲ研究者(見習い)の92年生まれがエンジニアを目指しながら日々寄り道するブログです。

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

rack/rack-test

Rspecで画像アップロードのテストデータを準備する


結合テストの時

結合テストの時は、ファイルパスを画面のフォームに渡すことでアップロードできます。

完成形

# 添付する画像を定義する
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