概要
FactoryBot
を使用する際のtrait
の使い方についてアウトプットしたいと思います。
traitとは
FactoryBotでテストデータを定義する際に用いるオプションのことです。
trait
を使用することによってテストファイル内でデータを定義する際により簡潔に記載することができるようになります。
使用例
前提
Userモデルにてname
に10文字以内というバリデーションが定義されていると仮定します。
そのバリデーションについてのテストを行う際のテストデータの定義を行います。
なおテストの記載は割愛します。
factories/user.rb
FactoryBot.define do
factory :user do
name { '太郎' }
trait :over_length_name do
name {'a' * 11}
end
end
end
traitを使用する場合
下記のように記載するだけでname
が11文字のデータを定義できます。
rspec/models/user_spec.rb
RSpec.describe User, type: :model do
describe 'バリデーションに関するテスト' do
let!(:user) { create(:user, :over_length_name) } # rails_helper.rbに設定定義済み
end
end
traitを使用しない場合
下記のコードはtrait
を使用したときと比べると冗長に感じます。
spec/models/user_spec.rb
RSpec.describe User, type: :model do
describe 'バリデーションに関するテスト' do
let(:over_length_name) { 'a' * 11 }
let!(:user) { create(:user, name: over_length_name) } # rails_helper.rbに設定定義済み
end
end
まとめ
例のようにtrait
を使用することによってよりコードを簡潔に記載することができるようになるので
積極的に使用していこうと思いました。