0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【RSpec】ActiveRecord使った複数画像添付のテストコードについて

Posted at

前提

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行目のテストに通らなかったコードでは第一、第二引数ともにファイルのパスを指定しています。
本来第一引数はファイルのパスを指定して、第二引数にファイルの種類を記載するのがルールのようです。

以上です。
テストコードに苦手意識がありますが、品質の担保には必須なので積極的に挑んでいこうと思いました。
内容に不備がございましたらご指摘いただけますと幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?