はじめに
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
の便利さをわかって頂けたら幸いです。
以上です!!