2013-05-22 33 views
6

Tôi có hai đặc điểm trong nhà máy của mình và tôi muốn một trong số chúng được đưa vào khi tôi tạo đối tượng, không có nó mặc định cho một đối tượng (để chọn ngẫu nhiên đặc điểm đó). Dưới đây là những gì tôi đang thực hiện:Có thể sử dụng câu lệnh if trong nhà máy (FactoryGirl) không?

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 

Tuy nhiên, có vẻ như bỏ qua tuyên bố đó và đi thẳng đến đặc điểm by_provider. Bất cứ ai biết làm thế nào tôi sẽ làm điều này?

+2

Điều này có vẻ như hành vi không mong muốn. Bộ thử nghiệm của bạn nên làm chính xác điều tương tự mỗi khi nó chạy, và không nên có bất kỳ sự ngẫu nhiên nào. Nếu bất cứ điều gì, bạn có thể muốn 2 bài kiểm tra riêng biệt ở đây, kiểm tra từng nhánh của logic. – GeekOnCoffee

Trả lời

1

Sử dụng khối bỏ qua.

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

    ignore do 
     if x == 1 
     by_referral 
     else 
     ... 
     end 
    end 
    end 
end 
Các vấn đề liên quan