Rails 4 rspec测试在布尔值上的数值only_integer失败?

时间:2013-08-14 19:01:31

标签: ruby-on-rails ruby rspec ruby-on-rails-4

我的模特

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

2 个答案:

答案 0 :(得分:1)

规范是正确的。 1是真实的(Ruby中唯一的非真值是假和零),但它不是布尔值。布尔值不是数字;他们是自己的类型。数值验证将验证类型实际上是数字,而布尔值不是数字。

> true.class
=> TrueClass
> 1.class
=> Fixnum

然而,您可能想要的是一个测试布尔值的验证:

validates :is_foo, inclusion => {:in => [true, false]}

答案 1 :(得分:0)

我猜当属性需要一个整数时,ruby / rails会将1替换为模型类属性的true。因此测试失败了,因为它将1与整数进行比较。