Techioz Blog

Factory_bot との関連付けを指定するにはどうすればよいですか?

概要

たとえば、ユーザーと投稿という 2 つのモデルがあります。投稿はユーザーに属しており、ユーザーには多数の投稿があります

#spec/factories/post.rb
FactoryBot.define do
  factory :post do
    user
    body Faker::Movie.quote
    posted_at "2018-04-03 13:33:05"
  end
end

#spec/factories/user.rb
FactoryBot.define do 
  factory :user do 
    first_name 'Jake'
  end
end

テストで Rspec を使用してこれを実行したいと考えています。

user = create(:user, first_name: 'Barry') #id 1
post = create(:post, user: user)

投稿の user_id は 1 であると予想されますが、事前に別のユーザーを作成しており、user_id は 2 です。

Factory_bot / Factory_girl でオブジェクトを作成するときに、関連付けを指定するにはどうすればよいですか?

解決策

FactoryBot の関連付けは、明示的関連付けと暗黙的関連付けの両方で指定できます。少なくともバージョンfactory_bot-6.2.0以降

暗黙的な関連付けではなく、明示的な関連付けを使用する必要があります。

#spec/factories/post.rb
FactoryBot.define do
  factory :post do
    association :user    # <<<--- here the change
    body Faker::Movie.quote
    posted_at "2018-04-03 13:33:05"
  end
end

#spec/factories/user.rb
FactoryBot.define do 
  factory :user do 
    first_name 'Jake'
  end
end

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#associations