我很困惑如何在Rspec和Rails中验证 bool 值。我了解Ruby中false
和nil
以外的所有内容都被视为true
。但是,当我将MySQL与Rails一起使用时,它将1
用作true
,将0
用作false
(如果我的理解是正确的话)。
我有以下型号规范。我想测试superuser
属性的 bool 值。
require 'spec_helper'
describe User do
before(:each) do
@valid_attributes = {
:username => "mike",
:password => "super_encryped_password",
:email => "[email protected]",
:superuser => true
}
end
it "should create a new instance given valid attributes" do
User.create!(@valid_attributes)
end
it "should have true or false for superuser" do
@valid_attributes[:superuser] = "hello"
User.new(@valid_attributes).should have(1).error_on(:superuser)
end
end
最佳答案
重要的一件事是ActiveRecord在幕后进行类型转换,因此您不必担心数据库如何存储 bool 值。只要在准备迁移时将字段设置为 bool 值,您甚至无需验证该字段是否为 bool 值。您可能要确保该字段不是nil
,但在模型类中带有validates_presence_of :superuser
声明。