RSpec 外部キーを使っているモデルをテストする際の手順(factory_girl使用)
やり方まとめ
・外部キーを使っている場合、外部キーの先のレコードが存在しないと、テストで弾かれる。だから必要なレコードを定義する。
具体的に
messageテーブルに外部キーでuserとgroupを設定しているとする。
「messageが投稿できるかどうか」というテストを行うにあたっては、messageに紐づくべきuserとgroupのレコードが必要になる。
factory_girlにて、messageのテスト用インスタンスだけでなく、userとgroupのものも設定する必要がある。
手順
1、spec/factories にgroup.rb user.rb message.rb を作成する。
2、それぞれにテスト用のインスタンスを定義する。
EX
user.rb
FactoryGirl.define do factory :user do name "hoge" email "hogehoge@hogehoge" password "hogehogehoge" end end
3つにそれぞれ定義する。
3、messageが投稿できるかどうかのテストコードを書く。
spec/models/message_spec.rb
require 'rails_helper' describe Message do #Messageモデルのテストであることの宣言 describe '#create' do it "is valid with a message" do #messageが存在していたら投稿できる user = create(:user) group = create(:group) message = build(:message, user_id: user.id, group_id: group.id) expect(message).to be_valid end end end
userとgroupをcreateしてDBに入れる→それをmessageで引っ張るという流れ。