LoginSignup
124
57

More than 1 year has passed since last update.

FactoryBotでtraitを使おう

Last updated at Posted at 2020-02-11

はじめに

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

124
57
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
124
57