2016-03-08 9 views
6

私の工場では、(評価された)ブール値フィールドがありますが、これをfalseに設定しようとしています。私はテストで FactoryGirl:ブール値にfalseの値を代入する

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

工場

フィールドが必要になることがしたい、と常に または

偽モデル

validates_presence_of :evaluated 

のいずれかに設定

it { should validate_presence_of(:evaluated) } 

私が走るときそれ

 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 

私は値をtrueに変更した場合、テストは私がブールのために偽の値を持つ工場を設定するにはどうすればよい

evaluated true 

を渡しますか?

+2

だろう。 'false.present? => false' –

+0

これは、dbレベルでnullでないものとして追加することです。 – ardochhigh

+0

はい、そうです –

答えて

12

presenceバリデーションではなく、inclusion_ofバリデーションを使用します。レールdocから

あなたは(実際の値は、trueおよびfalseです)ブールフィールドの存在を確認したい場合は、

validates_inclusion_of :field_name, in: [true, false]

これを使用したいと思うでしょう道にObject#blank?はブール値

すなわちfalse.blank? # => true

を扱うためであります

次に、あなたのテストでは、それはあなたがブール値の存在を確認することができないことより何かのように、

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

関連する問題