我只是不知道他们是为了什么。之前我认为他们很容易填充外键,但现在我发现情况并非如此。
# User attributes: id, name, password
factory :user_0, class: User do
id 0
name "Jimmy"
password "Jimson"
end
# Status attributes: id, user_id, content
factory :user_0_statuses, class: Status do
association :user, factory: :user_0
factory :user_0_status_0 do
id 0
content "noo"
end
factory :user_0_status_1 do
id 1
content "yees"
end
end
当:user_0_status_0和:user_0_status_1工厂在规范中.create
d时,我认为此工厂设置将在数据库中创建以下内容(请注意状态'user_id条目。):
users
id | name | password
0 | Jimmy | Jimson
statuses
id | user_id | content
0 | 0 | noo
1 | 0 | yees
但它创造了这个:
users
id | name | password
0 | Jimmy | Jimson
0 | Jimmy | Jimson
statuses
id | user_id | content
0 | nil | noo
1 | nil | yees
基本上,为每个嵌套状态工厂创建基于user_0工厂的全新用户,并且根本不设置状态的user_id。这种行为有用吗?
我根本看不到有关嵌套工厂的任何用途。什么是它们和关联方法?
答案 0 :(得分:0)
当工厂嵌套在另一个工厂定义中时,它会继承父工厂中定义的属性。如果您有一个用户工厂,您可以在其中嵌套一个“admin_user”工厂,该工厂具有所有基本用户特征以及任何使用户成为管理员的工具,而无需重新定义基本属性两次。
(稍微不相关:我不确定是否设置主键(Status是ActiveRecord类)是一种可靠的做法,我建议找另一种方法来解决这个问题。)