嵌套工厂有什么意义?

时间:2013-12-21 18:06:08

标签: ruby-on-rails factory-bot

我只是不知道他们是为了什么。之前我认为他们很容易填充外键,但现在我发现情况并非如此。

# 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。这种行为有用吗?

我根本看不到有关嵌套工厂的任何用途。什么是它们和关联方法?

1 个答案:

答案 0 :(得分:0)

当工厂嵌套在另一个工厂定义中时,它会继承父工厂中定义的属性。如果您有一个用户工厂,您可以在其中嵌套一个“admin_user”工厂,该工厂具有所有基本用户特征以及任何使用户成为管理员的工具,而无需重新定义基本属性两次。

(稍微不相关:我不确定是否设置主键(Status是ActiveRecord类)是一种可靠的做法,我建议找另一种方法来解决这个问题。)