2013-05-22 5 views
6

Ich habe zwei Züge in meiner Fabrik bekam, und ich möchte einer von ihnen aufgenommen werden, wenn ich das Objekt zu erstellen, ohne es (so wählen zufällig die Eigenschaft) zu einem Verzug. Hier ist, was ich tue:Kann eine if-Anweisung in einer Factory (FactoryGirl) verwendet werden?

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 

Es ist jedoch zu ignorieren scheint zu sein, dass, wenn Aussage und gerade zu by_provider Zug gehen. Weiß jemand, wie ich das machen würde?

+2

Dies scheint wie unerwünschtes Verhalten. Ihre Testsuite sollte jedes Mal genau dasselbe tun und sollte keine Zufälligkeit haben. Wenn überhaupt, möchten Sie wahrscheinlich 2 separate Tests, die jeden Zweig der Logik testen. – GeekOnCoffee

Antwort

1

Verwenden Sie einen Ignorierblock.

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

    ignore do 
     if x == 1 
     by_referral 
     else 
     ... 
     end 
    end 
    end 
end