Sim*_*tti 5 ruby ruby-on-rails factory-bot
是否可以使用关联作为特征中另一个关联的值?
让我描述一个(简化的)例子.我有3个型号
User
Forum
(belongs_to :forum
)Thread
(belongs_to :forum
,belongs_to :user
)请注意,Thread
包含一个user_id
,它不属于User
通过Forum
(目前,我不能改变这种约束).
我想知道的是,是否有办法定义像这样的特征
FactoryGirl.define do
factory :thread do
trait :with_forum do
association :user
# Lazy-evaluate the value of user to the previously created factory
# THIS IS THE KEY POINT: I want 'user' to be the factory created at the previous line
association :forum, user: user
end
end
end
Run Code Online (Sandbox Code Playgroud)
该特性应该做的是创建一个用户并将其与线程相关联.然后它应该创建一个论坛,但用户应该是先前创建的同一个实例.
主要有两个原因:
任何的想法?我试图使用延迟评估,但无法将其与关联一起使用.
做相反的事情并将线程的用户设置为与论坛的用户相同是否有意义?论坛工厂是否创建用户?
FactoryGirl.define do
factory :thread do
trait :with_forum do
forum
user { forum.user }
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果你真的想以其他方式做到这一点,你绝对可以使用惰性属性:
FactoryGirl.define do
factory :thread do
trait :with_forum do
user
forum { create(:forum, user: user) }
end
end
end
Run Code Online (Sandbox Code Playgroud)
缺点是无论用于构建线程的策略如何,它总是会创建一个论坛。