新人SEに向けて~はじめてのrspec編~⑤
現場に入ってRSpecをいじることになったけど、何をすればいいかよくわからない、そんな人に向けた記事。
※この記事ではRSpecをspecと略します。現場の人も大体スペックって呼ぶし。
前回の続き。
今回は、「準管理ユーザ」を新設することでデータの関係性がどう変わるのか、を切り口に、テストデータの作り方を紹介していく。
new構成のカラム
先ずは前回と同じ画像から。
これを見ると、管理ユーザは「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)
因みにテストデータを作成する際は、階層構造を先に把握し、上の階層から作成すれば関連付けが定義しやすい。
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!(特に意味はない)
今回はここまで。
次回は、今回で生じた疑問に答えるもよし、テストケースの想定の仕方について語るもよし。どうなるかは未定。
いつかまとめてガッツリめの記事にしますかね。
コメントで感想や指摘いただけると助かります!
それでは!(`・ω・´)