概要
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を使用することによってよりコードを簡潔に記載することができるようになるので
積極的に使用していこうと思いました。