Re:ゼロから始めるNo Error No Life

ぷろぐらみんぐ的なことと趣味的な日常を少々

Rspecに初心者が挑む①

心折れるテスト

テストを作成するのって心折れません?

折れますよ。俺は。

今回折れかけたのが複数属性のデータを作成するにあたって(アソシエーションは、model側にて張ってあるため記述すれば勝手に作成されるはず)

そうです。今回関わっているプロジェクトに関して、あまりにも膨大な属性のUserが必要なためそこで心折れかけました。

いや折れてます。

頑張る初心者は、最初は冗長

題名の通り初心者の俺は、とにかく「ぐぐる」を繰り返し、行きついたのは、「sequence、trait」を多用してネストし、ER図を頭に描きなら作成順を間違えないようにfacrotyファイルに定義をする

以上、これ地味にだるい

参考までに

日ごろからお世話になっているqiitaさんには、たいていのことが載っていたためどうにか検証をしつつ作成を開始しました。

以下に現時点でのソースを晒します

※冗長なのは、重々承知ですが、今後リファクタリングは行いたいです。

属性数は、多いので割愛してます。

#userというclassがmodelにあった場合以下
FactoryGirl.define do
  factory :user do
    sequence :name |n| do
      name "User #{n}"
    end

    sequence :name |n| do
      email "user.#{n}@example.com"
    end

    trait :active_user do
      delete_flag 0
    end

    trait :deleted_user do
      delete_flag 1 
    end
    
    factory :system_user do
      #システムuser(adminUser)の場合
      admin_flag 1
      email 'master@example.com'
      password '1234567890'
    end
  end
end


#使用方法
user = create(:user, :active_user)

#これでactiveなuserのレコードが作成されます
#次にsystemUserを作成する
system_user = create(:system_user)
#これでnameは適当だがそれ以外は、固有のレコードが作成可能
#変数指定を一般userとは違って指定してないため,区切りで書く必要なし

今回passwordに関しては、適当に暗号化すらしてないがそこは割愛、本来ならbcryptなどを使用したりするかとおもいます。

ひとまずはこれらを組み合わせて繰り返していこうかなと思っています。

他にいい手だてがあると思うんですがね。。。。どうも素養が低いため考え付いたのが上記のような書き方・・・・これにアソシエーションも加わるので記述の可読性が落ちる・・・

そろそろ書籍を真面目に読もう。