【发布时间】:2011-07-07 09:37:29
【问题描述】:
我正在尝试确保我的模型的字段是布尔值,但我的测试一直失败。
读完这个:Validating boolean value in Rspec and Rails 和这个Rails: how do I validate that something is a boolean? 我最终是这样做的:
class Model < ActiveRecord::Base
validates :my_field, :inclusion => { :in => [true, false] }
end
我尝试了几种不同的方法(使用 rspec 和 shoulda 匹配器)来测试它,但由于我的测试不断失败,我现在只能采用最愚蠢的 (?) 方法。尽管如此,测试没有通过,我猜有某种机制可以在某处转换值。
这是我用来了解发生了什么的:
# create instance without setting value ...
# these work as expected
model_instance.valid?.should be_false # passes
model_instance.my_field = true
model_instance.valid?.should be_true # passes
model_instance.my_field = false
model_instance.valid?.should be_true # passes
# works as expected
model_instance.my_field = ""
model_instance.valid?.should be_false # passes
# these should pass but fail
model_instance.my_field = "foo"
model_instance.my_field.should == "foo" # fails as well, my_field == false
model_instance.valid?.should be_false # fails
model_instance.my_field = "false"
model_instance.my_field.should == "false" # fails as well, my_field == false
model_instance.valid?.should be_false # fails
model_instance.my_field = "123"
model_instance.valid?.should be_false # fails
model_instance.my_field = "true"
model_instance.my_field.should == "true" # fails as well, my_field == true
model_instance.valid?.should be_false # fails
我错过了什么? 似乎该值以某种合乎逻辑的方式转换,但在哪里以及如何防止它?如何正确进行这种验证?
【问题讨论】:
标签: ruby-on-rails unit-testing validation boolean