我的模特
validates :is_foo, presence: true, numericality: {only_integer:true, less_than_or_equal_to: 1, greater_than_or_equal_to: 0}
在我的规范中
describe "when is_foo is not an integer" do
before {@user.is_foo = true}
it {should_not be_valid}
end
上面的测试失败了,但是因为我将is_foo设置为布尔值而不是整数,测试是否应该通过?
布鲁因在红宝石中被认为是整数吗?因为当我做的时候
true.to_i # error
true == 1 # false
false == 0 # false
答案 0 :(得分:1)
规范是正确的。 1是真实的(Ruby中唯一的非真值是假和零),但它不是布尔值。布尔值不是数字;他们是自己的类型。数值验证将验证类型实际上是数字,而布尔值不是数字。
> true.class
=> TrueClass
> 1.class
=> Fixnum
然而,您可能想要的是一个测试布尔值的验证:
validates :is_foo, inclusion => {:in => [true, false]}
答案 1 :(得分:0)
我猜当属性需要一个整数时,ruby / rails会将1替换为模型类属性的true。因此测试失败了,因为它将1与整数进行比较。