2017-07-17 10 views
0

を失敗:ファクトリー・ガールは、私は、次のタスクモデル持っている存在の検証

class Task < ApplicationRecord 
    validates :body, presence: true, length: { minimum: 10 } 
    validates :complete, presence: true 
end 

とFactoryGirlオブジェクト生成コードに続く:私の仕事で

FactoryGirl.define do 
    factory :incomplete_task, class: :Task do 
    body { Faker::Pokemon.name + Faker::Pokemon.name } 
    complete false 

    factory :complete_task do 
     complete true 
    end 
    end 
end 

コントローラテストを、私は持っている:

describe '#update' do 
    it 'toggles completion' do 
     incomplete_task = create :incomplete_task 
     toggle_completion(incomplete_task) 
     expect(incomplete_task.complete).to be_true 
    end 
    end 

ただし、フィールド 'complete'がFGによって作成されたタスクオブジェクトに存在しないため、これは失敗します。

Failures: 
    1) TasksController#update toggles completion 
    Failure/Error: incomplete_task = create :incomplete_task 

    ActiveRecord::RecordInvalid: 
     Validation failed: Complete can't be blank 

ここでは何が起こっていますか?私は適切な属性を適切に設定しています。ボディーは正常にチェックアウトされています。ここでタスクスキーマも同様である。Rubyで

# Table name: tasks 
# 
# id   :integer   not null, primary key 
# created_at :datetime   not null 
# updated_at :datetime   not null 
# body  :text 
# complete :boolean 

答えて

0

falseは(存在しない)ブランクの値(nilと共に、空の文字列/配列および他のブランク値)であると考えられます。したがって、プレゼンスバリデーターは正当にそのレコードを拒否します。あなたは(実際の値はtruefalseある)ブールフィールドの存在を確認したい場合は、validates_inclusion_of :field_name, in: [true, false]を使用したいと思うでしょう

documentationは、次のコメントがあります。

これは、Object#blank?がブール値(false.blank? # => true)を処理するためです。

関連する問題