rspec factorybotの外部キーの書き方について

今日rspecについて学んだことを備忘録として書き留めます。 テストを実行する際にfactorybotで定義した外部キー(今回はseller_idとcategory_id)について、ちゃんと値としては入っているぽいけど値がありません。必ず必要です。ってエラーが出てしまう。こんな感じ。

 to be valid, but got errors: Seller must exist, Category must exist

binding.pryでitem = build(:item)を見ると、

略
 category_id: 1,
 trading_status: "InTransit",
 buyer_id: nil,
 seller_id: 1,
略

見かけじょうは入っているような気もする。メンターさんに聞いてみると、seller_id:1の中身が入っていないとのこと。中身を見てみると…

User.all 
   => []

確かに入っていない。なので、先にuserのデータを作成しないといけないみたい。 binding.pryしてターミナル上で先に中身のデータを作成してから、テストを実行したらエラー解決を確認しました。ちなみにcategoryも同じです。

FactoryBot.create(:category)
FactoryBot.create(:user)
exit  #OK!!

rspec.rbのファイルではbefore_actionで先に定義をするかfactorybotで定義する。 今回はfactorybotでこんな感じで書いたらいけました。

 category_id { FactoryBot.create(:category).id }
 seller_id { FactoryBot.create(:user).id }   

メンターさんは.idがなくても問題ないって言ってたけどなかったらエラーになってしまった…なにか間違えているのだろうか… とりあえず上のように書いたらテストはパスしたのでヨシっていうことで笑

結論

外部キーをfactorybotで渡す際は一緒に相手のデータも作ってあげましょう。と言うこと。 勉強になりました。