2013-08-01 10 views
1

聽巨人機器人粉碎成其他巨人機器人播客,聽說你希望你的FactoryGirl工廠是最小的,只提供那些使對象在數據庫中有效的屬性。話雖如此,但談話還表示特質是基於未來可能發生變化的屬性來定義特定行爲的一種非常好的方式。編寫無效的FactoryGirl工廠/特性是不是個好主意?

我想知道是否有一個好主意,有特性定義,有目的地失敗驗證清理規範代碼。這裏有一個例子:

factory :winner do 
    user_extension "7036" 
    contest_rank 1 
    contest 

    trait :paid do 
    paid true 
    end 

    trait :unpaid do 
    paid false 
    end 

    trait :missing_user_extension do 
    user_extension nil 
    end 

    trait :empty_user_extension do 
    user_extension "" 
    end 

end 

會允許我這樣稱呼我的規格build_stubbed(:winner, :missing_user_extension)在測試中,我打算失​​敗驗證。我想我可以通過將這些壞工廠嵌入另一個名爲:invalid_winner的工廠來進一步明確失敗,但我不太確定這是否有必要。我最感興趣的是聽到別人對這個概念的看法。

回答

3

不,這不會讓你的規格在一段時間後變得清晰明白,並且以後當你的代碼發展到那些今天失敗的工廠可能不會再失敗,並且你將很難查看所有規格。

對於一個明確識別的事情,編寫測試更好。如果您想檢查保存失敗並且缺少強制參數,只需將其寫入常規工廠並添加參數以覆蓋工廠的值:

it 'should fail' do 
    create :winner, user_extension: nil 
    ... 
end 
相關問題