【Rails】ファイルアップロードのテスト時のFactoryGirl (FactoryBot) の設定
このようにしていまして
FactoryGirl.define do # 中略 factory :content_figure do content do ActionDispatch::Http::UploadedFile.new( filename: 'figure.png', type: 'image/png', tempfile: File.open(Rails.root.join('spec', 'files', 'figure.png')) ) end end end end
こんな感じで ActionDispatch::Http:UploadedFile.new
するのもいいんですが、
fixture_upload_path
を使うのもアリかと
include ActionDispatch::TestProcess FactoryGirl.define do factory :content_figure do content { fixture_file_upload(Rails.root.join('spec', 'files', 'figure.png'), 'png'), 'image/png' } end end
しかしActionDispatch::TestProcess
をインクルードするのを忘れると困ります
この記事のコメントによるとfixture_file_upload
はほとんど何もやっていないそうなので、Rack::Test::UploadedFile.new
を直接呼んでしまってもいいらしい
content { Rack::Test::UploadedFile.new(Rails.root.join('spec', 'files', 'figure.png'), 'png'), 'image/png' }
fixture_file_upload
は呼び出し元のクラスがfixture_path
を持っていれば自動的にspec/fixtures
までのパスを追加してくれますが、
FactoryGirl
からでは参照してくれないので、別途fixture_path
の設定が必要になります
今回はspec/files
配下にイメージを置いてしまっていますし、別途fixture_path
を設定するのも面倒なので、このように直接パス指定する形でいいかと
こちらの記事のコメントでは、FactoryGirl からパスを参照させるためにfixture_path
を設定していたり