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