はじめに
FactoryBotでテストデータを作成するに当たってtraitを押さえるのは必須かなと思います。
RSpecをこれから始める方向けにこの記事を書きます。
traitを使ってみる
一例としてTaskのファクトリを作成する場面を想定してtraitを使ってみます。
# spec/factories/tasks.rb
FactoryBot.define do
factory :task do
title { 'Task' }
status { :todo }
from = Date.parse("2019/08/01")
to = Date.parse("2019/12/31")
deadline { Random.rand(from..to) }
trait :done do
status { :done }
completion_date { Time.current.yesterday }
end
end
end
次にspecファイルで通常のtask、traitを活用したtaskの二種類を書いてみます。
let(:task) { create(:task) }
これは通常の書き方。
これにより、statusがtodoの通常のtaskが作成可能になる。
次にtraitを活用したtask(※ 想定場面はステータスが完了のタスクを作成したい時)
let(:task_done) { create(:task, :done) }
これにより、statusがdone、completion_dateがTime.current.yesterday のtaskが作成できる。
この時traitを使わないと以下のようにコードが長くなります。
{ create(:task, status: :done, completion_date: Time.current.yesterday) }
しかし、traitを使えば簡潔に書ける!
この記事でtraitの便利さをわかって頂けたら幸いです。
以上です!!