2013-05-22 4 views
6

私は自分の工場で2つの特性を持っています。オブジェクトを作成するときに、それらのうちの1つをデフォルトにすることなく(その特性をランダムに選択して)組み込むことができます。ここで私がやっているものです:工場(FactoryGirl)でifステートメントを使用することはできますか?

FactoryGirl.define do 
    factory :follow_up do 
    first_name  { Faker::Name.first_name } 
    last_name  { Faker::Name.last_name } 
    phone   { Faker::PhoneNumber.cell_phone.gsub(/[^\d]/, '').gsub(/^1/, '2')[0..9] } 
    email   { Faker::Internet.email } 
    email_preferred true 
    consent   false 

    if [1, 2].sample == 1 
     by_referral 
    else 
     by_provider 
    end 

    trait :by_referral do 
     association :hospital 
     association :referral 
     source { FollowUp::REFERRAL} 
    end 

    trait :by_provider do 
     association :provider 
     source { FollowUp::PROVIDER } 
    end 
    end 
end 

しかし、それは声明とはby_provider形質にまっすぐ行けばということを無視しているようです。誰でも私はこれをやる方法を知っていますか?

+2

これは望ましくない動作のようです。テストスイートは、実行するたびに全く同じことを行う必要があります。また、ランダム性を持たないようにしてください。何かがあれば、ここで2つの別々のテストを行い、ロジックの各ブランチをテストすることをお勧めします。 – GeekOnCoffee

答えて

1

無視ブロックを使用してください。

FactoryGirl.define do 
    factory :follow_up do 
    text "text" 
    author "Jim" 

    ignore do 
     if x == 1 
     by_referral 
     else 
     ... 
     end 
    end 
    end 
end 
関連する問題