当我在我的测试规范中尝试这个时,当我没有在模型中进行验证时它会一直通过:
it { should ensure_inclusion_of(:private).in_array(%w[true false]) }
该属性是一个布尔值,为真或假:
validates_inclusion_of :private, :in => [true, false]
我该如何正确地写这个?
当我在我的测试规范中尝试这个时,当我没有在模型中进行验证时它会一直通过:
it { should ensure_inclusion_of(:private).in_array(%w[true false]) }
该属性是一个布尔值,为真或假:
validates_inclusion_of :private, :in => [true, false]
我该如何正确地写这个?
True
并且False
不是字符串,所以不要使用 %w。
it { should ensure_inclusion_of(:private).in_array([true, false]) }
更新 - 2014 年 4 月 10 日
此验证在当前版本的 Shoulda 中不起作用,并且根据此最近的提交,它不会被修复,而是会引发异常。
由于分配给布尔字段的任何值都将被强制转换为 true(由 设置true, 1, '1', 't', 'T', 'true', 'TRUE'
)或 false(由其他任何设置),我测试布尔字段的首选方法如下:
对于允许数据库中的空值的布尔值 - 不需要测试,任何可能的值都是有效的
对于不允许在数据库中使用空值的布尔值 -在模型上设置it { should_not allow_value(nil).for(:field)
时使用将通过validates :field, inclusion: { in: [true,false] }