FactoryBotの関連付けで常に同一の親を持つように設定する方法
FactoryBot
の関連付けの記述で常に同一の親を指定する方法がわからなかったので質問します。
以下のような関係のモデルがあり
class User < ApplicationRecord
has_many :trades
end
class Company < ApplicationRecord
has_many :trades
end
class Trade < ApplicationRecord
belongs_to :user
belongs_to :company
end
テストのために以下のような記述をしています。
test/factries.rb
FactoryBot.define do
factory :user do
email { Faker::Internet.safe_email }
password { Faker::Internet.password }
end
factory :company do
code { Faker::Number.unique.number(4) }
end
factory :trade do
sequence(:order_number)
user
company
end
end
test/models/trade_test.rb
class TradeTest < ActiveSupport::TestCase
def setup
@company = create(:company)
@user = create(:user)
end
test 'Foo' do
create(:trade, user: @user, company: @company, price: 200)
create(:trade, user: @user, company: @company, price: 100)
assert(@user.foo)
end
end
ほとんどのテストにおいて上記のようにtrade
を生成する時に同一のuser
とcompany
を指定するのですが、常にuser: @user, company: @company
を記述するのは冗長なのでもっとスッキリかけないかと思っています。
Factory.define
かsetup
内でTrade
を作成する時はデフォルトで同じ親を持つように指定する方法はないでしょうか?