2

我想使用FactoryGirl工厂创建与has_many关系的实例并失败。 我有两个类:计算机和网卡。每台计算机可以有多个网卡。has_many关系使用FactoryGirl

定义了两个ActiveRecords:

1.

class Computer < ActiveRecord::Base 
    has_many :network_cards 
end 

2.

定义的下列工厂:

1.

factory :computer do 
    sequence(:name) { |n| "PC_#{n}" } 
    transient do 
    network_cards_count 1 
    end 

    after(:create) do |computer| 
    create_list(:network_card, evaluator.network_cards_count, computer: computer) 
    done 
end 

2.

factory :network_card do 
    sequence(:name) { |n| "NC_#{n}" } 
    sequence(:type) { |n| "TYPE_#{n}" } 
end 

如今,在RSpec的测试开创了电脑,当我得到一个奇怪的行为,我无法解释。

@computer_1 = FactoryGirl.create(:computer) 
@computer_1.network_cards.size #Expect 1. Got 0. Why? 
@computer_1.reload 
@computer_1.network_cards.size # Got 1 

任何想法我错过了什么?

回答

2

试试这个:

after(:build) do |computer, evaluator| 
     computer.network_cards << build_list(:network_card, evaluator.network_cards_count, computer: computer) 
end 
2
factory :computer do 
    sequence(:name) { |n| "PC_#{n}" } 
    transient do 
    network_cards_count 1 
    end 

    after(:create) do |computer, evaluator| 
    create_list(:network_card, evaluator.network_cards_count, computer: computer) 
    computer.reload #<----- solves the issue 
    end 
end 
+0

是'evaluator'可用的,如果它不是在你的块如@艾哈迈德的答案吗?我一直指定它。 – Dan

+0

@丹这是一个错字。固定 – ntrax111