2015-02-18 6 views
5

Ich habe eine Fabrik für Benutzer. Ich möchte, dass die Benutzer standardmäßig bestätigt werden. Aber angesichts eines Merkmals unconfirmed möchte ich nicht, dass sie bestätigt werden.Wie erreiche ich bedingtes Verhalten von FactoryGirl basierend auf Merkmalen

Während ich eine funktionierende Implementierung habe, die auf Implementierungsdetails basiert, anstatt auf Abstraktion, würde ich gerne wissen, wie man das richtig macht.

factory :user do 
    after(:create) do |user, evaluator| 
    # unwanted implementation details here 
    unless FactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed) 
     user.confirm! 
    end 
    end 
    trait :unconfirmed do 
    end 
end 

Ich denke etwas in diese Richtung. Aber das funktioniert nicht und führt zu einer nicht definierte Methode `unbestätigt‘

factory :user do 
    ignore do 
    unconfirmed = false 
    end 

    after(:create) do |user, evaluator| 
    user.confirm! unless evaluator.unconfirmed 
    end 

    trait :unconfirmed do 
    unconfirmed = true 
    end 
end 

Antwort

7

Sie waren fast da:

factory :user do 
    transient do 
    unconfirmed false 
    end 

    trait :unconfirmed do 
    unconfirmed true 
    end 

    after(:create) do |user, evaluator| 
    user.confirm! unless evaluator.unconfirmed 
    end 
end 
+0

thx. das hat es getan. – branch14