0
1

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.

備忘録(課題:モデルテストコード)

Posted at

画像ファイル付きのモデルテストコードで忘れていたのでアウトプットします。

テスト用画像をアプリケーションファイルへ配置するためにpublicディレクトリにimagesディレクトリを作成

作成したimagesディレクトリの中に画像を配置する
例:(public/images/テスト用画像ファイル)

class Item < ApplicationRecord
  belongs_to :user
  has_one_attached :image

 省略
  validates :image, presence: true
end

validatesは、presence: trueで良いみたいでした。

該当のfactoriesディレクトリに画像を開くための記述をする

afterメソッド

任意の処理の後に指定の処理を実行することができる
after(:build) とすることで、インスタンスがbuildされた後に指定の処理を実行できる

FactoryBot.define do
  factory :item do
    
省略

    after(:build) do |item|
      item.image.attach(io: File.open('public/images/テスト用画像ファイル'), filename: 'テスト用画像ファイル')
    end
  end
end

# io: File.openで設定したパスのファイル(public/images/test_image.png)を、test_image.pngというファイル名で保存

テストコードを記述するファイル(今回はitem_spec.rbファイル)での記述方法

省略
      it 'nameが空では保存できない' do
        @item.name = ''
        @item.valid?
        expect(@item.errors.full_messages).to include("Name can't be blank")
      end
      it '商品の画像がないと保存できない' do
        @item.image = nil #←ActiveStorageを使用していると""だとエラーが出るため、nilを使って空欄を演出する
        @item.valid?
        expect(@item.errors.full_messages).to include("Image can't be blank")
      end

省略

今までは""で統一して実装していたけど今回のテストコードで勉強になりました。
バリデーションの掛け方やテストコードの記述方法は他にもあると思いますが、ひとまずは、テストコードがグリーンになったので機能していると思われます。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?