2016-03-08 28 views
6

Fabrikamda false olarak ayarlamaya çalıştığım bir boolean alanım var (değerlendirildi). Saha testindeFactoryGirl: Bir false değerini false atama

it { should validate_presence_of(:evaluated) } 

yılında

validates_presence_of :evaluated 

Fabrikası

FactoryGirl.define do 
    factory :submission do 
    evaluated true 
    score 1.5 
    ranking 1.5 
    submission_type "user" 
    . 
    . 
    end 
end 

gereklidir ve her zaman gerçek veya yanlış

Modeli olarak ayarlanabilir istiyorum Koştuğumda Ben true değerini değiştirirseniz o test

evaluated true 

nasıl Booleans için sahte değerlerle bir Fabrikası kurabilirsiniz geçer

 Failure/Error: expect(@submission).to be_valid 
    expected #<Submission id: nil, competition_id: 163, user_id: 134, team_id: nil, evaluated: false, score: 1.5, ranking: 1.5, submission_type_cd: "user", withdrawn: true, withdrawn_date: "2016-02-08", created_at: nil, updated_at: nil> to be valid, but got errors: Evaluated can't be blank 

?

+2

Bu boole varlığını doğrulamak olamaz fazlası var, gibi bir şey olurdu. 'False.present? => false ' –

+0

Yani en iyi seçenek db düzeyinde null olarak eklemek değil mi? – ardochhigh

+0

Evet, böyle yapardım –

cevap

12

presence doğrulama yerine inclusion_of doğrulama kullanmayı tercih ederim. raylar doc itibaren

,

Eğer (gerçek değerler true ve false) bir boolean alanın varlığını doğrulamak istiyorsanız

, sen

validates_inclusion_of :field_name, in: [true, false]

Bu kullanmak isteyeceksiniz yol Object#blank? boolean değerlerini

yani false.blank? # => true

kolları kaynaklanmaktadır

Ardından test

it { should ensure_inclusion_of(:field_name).in_array([true, false]) }

İlgili konular