2016-03-08 28 views
6

W mojej fabryce mam pole boolowskie (ocenione), które próbuję ustawić na false. Chcę pole być wymagane, a zawsze ustawiony na prawda lub fałszywegoFactoryGirl: Przypisywanie wartości false do boolowskiej

Modelu

validates_presence_of :evaluated 

Fabrykę

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

W teście

it { should validate_presence_of(:evaluated) } 

Kiedy biegnę to

 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 

Gdybym zmienić wartość true, test przechodzi

evaluated true 

Jak mogę założyć fabrykę z fałszywych wartości dla wartości logiczne?

+2

To bardziej, że nie można potwierdzić obecność logicznych. 'false.present? => false' –

+0

Więc najlepszą opcją jest dodanie go jako nie zerowego na poziomie db? – ardochhigh

+0

Tak, właśnie to robię –

Odpowiedz

12

Wolałbym używać sprawdzania poprawności inclusion_of zamiast sprawdzania presence.

z szyn doc,

Jeśli chcesz, aby potwierdzić obecność logiczną pola (gdzie rzeczywiste wartości są prawdziwe i fałszywe), będziemy chcieli, aby korzystać

validates_inclusion_of :field_name, in: [true, false]

ten jest to spowodowane sposobem Object#blank? obsługuje wartości logicznych

tj false.blank? # => true

Wtedy twój badanie byłoby coś,

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