我很困惑如何在Rspec和Rails中验证 bool 值。我了解Ruby中falsenil以外的所有内容都被视为true。但是,当我将MySQL与Rails一起使用时,它将1用作true,将0用作false(如果我的理解是正确的话)。

我有以下型号规范。我想测试superuser属性的 bool 值。

  • 我如何在此处编写规范?
  • 如何在此处编写实现代码?
  • 我的规范和实现代码是否特定于特定的数据库(例如MySQL和PostgreSQL)?
    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声明。

    10-07 21:47