はじめに
Activestorageを用いているアプリケーションで単体テストコードを書く際に、注意点が何点かあったため、忘れないために記録に残します。
注意点
1.FactoryBotでのimageカラムの取り扱いについて
fakerを使って、ランダムに画像データを添付させることは不可能なので、
あらかじめテスト用の画像データを用意しておく必要がある。
<対応策の一例>
1.「public」ディレクトリの中に「images」というディレクトリを作成し、画像「test.jpg」(任意)を、imagesディレクトリの中に配置する。
イメージ図(階層)
app
bin
・
・
public
|
images
|
test.jpg
2.afterというメソッドを用いて、インスタンス生成後に画像が保存されるようにする。
FactoryBot.define do
factory :message do
content {Faker::Lorem.sentence}
association :user
association :room
after(:build) do |message|
message.image.attach(io: File.open('public/images/test.jpg'), filename: 'test.jpg')
end
end
end
※:messageがbuildされた後で、io: File.openで設定したパスのファイル(public/images/test.jpg)を、test.jpgというファイル名で保存をしている。という意味。
2.単体テストコードを書く際の空の表現方法
nameなどの文字列
@hoge.name = ""
画像データなど
@hoge.image = nil
(""では空の文字列を保存という意味になると思われる)
3.補足情報
上記1で記載したfactorybotで、messageはuser,roomと必ず紐づいている必要があるため、
association :user
association :room
アソシエーションが追記されている。
これにより、messageが生成されたとき、それに紐づくuser,roomが自動生成される。