当我在测试规范中尝试此操作时,当我尚未在模型中进行验证时,它会继续通过:
it { should ensure_inclusion_of(:private).in_array(%w[true false]) }
该属性是一个 bool 值,要么为真,要么为假:
validates_inclusion_of :private, :in => [true, false]
我该如何正确地写这个?
最佳答案
True
和 False
不是字符串,因此不要使用 %w。
it { should ensure_inclusion_of(:private).in_array([true, false]) }
更新 - 2014 年 4 月 10 日
此验证在 Shoulda 的当前版本中不起作用,并且根据 this recent commit ,它不会被修复,而是会引发异常。
分配给 bool 字段的任何值都将被转换为 true(由 true, 1, '1', 't', 'T', 'true', 'TRUE' 设置)
)或 false(由其他任何设置)我测试 bool 字段的首选方法如下:
对于数据库中允许空值的 bool 值 - 不需要测试,任何可能的值都有效
对于数据库中不允许存在空值的 bool 值 - 使用
it { Should_not allowed_value(nil).for(:field)
,它将在validates :field 时通过, inclusion: { in: [true,false] }
在模型上设置
关于ruby-on-rails - Ensure_inclusion_of 在应该失败的时候仍然通过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357165/