FactoryGirl:将值false赋给布尔值

ard*_*igh 7 rspec ruby-on-rails factory-bot

在我的工厂我有一个布尔字段(已评估),我试图将其设置为false.我希望该字段是必需的,并始终设置为truefalse

模型

  validates_presence_of :evaluated
Run Code Online (Sandbox Code Playgroud)

FactoryGirl.define do
  factory :submission do
    evaluated true
    score 1.5
    ranking 1.5
    submission_type "user"
    .
    .
  end
end
Run Code Online (Sandbox Code Playgroud)

在测试中

    it { should validate_presence_of(:evaluated) }
Run Code Online (Sandbox Code Playgroud)

当我运行它

     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
Run Code Online (Sandbox Code Playgroud)

如果我将值更改为true,则测试通过

    evaluated true
Run Code Online (Sandbox Code Playgroud)

如何为Booleans设置错误值的工厂?

Ven*_* Ch 13

我宁愿使用inclusion_of验证而不是presence验证.

来自rails 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]) }