前提
Rails 6.1.4
ruby 2.6.5
ActiveRecord
状況
現在Railsを使ってアプリケーションを開発しています。
model単体テストで画像添付のコードを書くのにかなり時間を要しました。(まず正常系のテストが通りませんでした)
コード
sotreというモデルについてテストしています。
画像ファイル名は「xxx」「yyy」と置き換えてあります。
spec/models/store_spec.rb
RSpec.describe Store, type: :model do
describe '店舗情報の投稿' do
let(:store) { FactoryBot.build(:store) }
# let(:images) { fixture_file_upload('/xxx.jpeg', '/yyy.png') }
context '店舗情報が投稿できる' do
it '必要な情報が全て入力されていれば投稿できる' do
store.images = [ fixture_file_upload('xxx.jpeg', 'image/jpg'), fixture_file_upload('yyy.png', 'image/png') ]
expect(store).to be_valid
end
end
(中略)
end
end
4行目でコメントアウトしているコードは修正前のコードです。
第一引数と第二引数それぞれに画像のパスを指定していました。
8行目のstore.images~というのが今回追記したコードです。
fixture_fire_uploadが2回出てくるのは、複数の画像を添付するためです。
画像1枚のみなら2回目の表記は不要です。
第一引数では画像のパスを、第二引数ではファイルの種類を指定しています。
下記コードはRailsのバージョンが6.1以降であれば必須ですが、それ以前(6.0)のバージョンであれば必須ではありません。
spec/rails_helper.rb
FactoryBot::SyntaxRunner.class_eval do
include ActionDispatch::TestProcess
include ActiveSupport::Testing::FileFixtures
end
なぜテストで通らなかったのか考える
4行目のテストに通らなかったコードでは第一、第二引数ともにファイルのパスを指定しています。
本来第一引数はファイルのパスを指定して、第二引数にファイルの種類を記載するのがルールのようです。
以上です。
テストコードに苦手意識がありますが、品質の担保には必須なので積極的に挑んでいこうと思いました。
内容に不備がございましたらご指摘いただけますと幸いです。