新人SEに向けて~はじめてのrspec編~⑤

f:id:piyo_yeah:20181202190633j:plain


現場に入ってRSpecをいじることになったけど、何をすればいいかよくわからない、そんな人に向けた記事。
※この記事ではRSpecをspecと略します。現場の人も大体スペックって呼ぶし。

前回の続き。
今回は、「準管理ユーザ」を新設することでデータの関係性がどう変わるのか、を切り口に、テストデータの作り方を紹介していく。

new構成のカラム

先ずは前回と同じ画像から。
f:id:piyo_yeah:20180808235516p:plain

これを見ると、管理ユーザは「user_id」以外にも「sub_admin_id」というカラムが必要になる。
準管理ユーザに必要なカラムは、「admin_user_id」「user_id」の二つ。
一般ユーザには、新しく「sub_admin_user_id」が必要になる。

カラムが変わったことによって、migrationファイルを新たに作成してrails db:migrate を実行する必要があるが、そこは割愛する。

テストデータを作成してみる

ようやく本題だ。以上の内容をふまえて、どんなデータを用意すべきだろうか?

先ずは作るデータをイメージしよう。
管理ユーザが1人いる。準管理ユーザも1人いる。
一般ユーザは2人いて、1人だけが準管理ユーザの管理対象である。
一般ユーザはファイルを1つ所有している。

FactoryGirlを使うとこんな感じになるだろう。

@admin_user = FactoryGirl.create(:admin_user)
@sub_admin_user = FactoryGirl.create(:sub_admin_user, admin_user: @admin_user.id)
@user1 = FactoryGirl.create(:user, admin_user_id: @admin_user.id)
@user2 = FactoryGirl.create(:user, sub_admin_user_id: @sub_admin_user.id)
@file1 = FactoryGirl.create(:file, user_id: @user1.id)
@file2 = FactoryGirl.create(:file, user_id: @user2.id)

f:id:piyo_yeah:20180809204130p:plain

因みにテストデータを作成する際は、階層構造を先に把握し、上の階層から作成すれば関連付けが定義しやすい。

FactoryGirlのルール

先にコードを書いてしまったが、FactoryGirlを使用する際には spec/factories/ ディレクトリ配下にあるファイルを編集する必要がある。
Factoryファイルはそれぞれのモデルごとに作られるもので、DBのテーブルにおけるカラムを指定するように表記できる。

Factoryファイル

先ずはAdminUserのFactoryファイル。

FactoryGirl.define do
  factory :admin_user do
  end
end

id のカラムは児童で付加されるため、Factoryファイルには記載する必要はない。
次にSubAdminUserのFactoryファイル。

FactoryGirl.define do
  factory :sub_admin_user do
    admin_user_id 1
    user_id 1
  end
end

ここまで書いてきたが、準管理ユーザには、複数のユーザが所属できるはずである。
そのような場合に、どうやってFactoryファイルを書くべきかは、筆者も未だわかってないので今後の宿題にしておく。

おわり

終わLinguistic!(特に意味はない)
今回はここまで。
次回は、今回で生じた疑問に答えるもよし、テストケースの想定の仕方について語るもよし。どうなるかは未定。
いつかまとめてガッツリめの記事にしますかね。

コメントで感想や指摘いただけると助かります!
それでは!(`・ω・´)