模型通过验证:presence =>数据库中为true且仍然为零

时间:2011-09-13 23:42:05

标签: sqlite ruby-on-rails-3.1 rspec2 factory-bot

user_type是用户模型中的一列,必须是:presence =>真正。当将nil传递给user_type时,它拒绝在rspec中。但是,factory_girl可以使用sqlite3将nil user_type存储到字段中。

运行rails 3.1.0。 rspec 2.6.0和factory_girl 2.1.0

//用户模型:

  validates :user_type,  :presence => true  

//工厂女孩定义:

Factory.define :user do |user|

  user.name                  "Test User"
  user.email                 "test@test.com"
  user.password              "password1"
  user.password_confirmation "password1"
  user.status                "active"
  user.user_type             "employee"

end

Factory.define :user_level do |level|

  level.role                 "sales"
  level.position             "member"
  level.team                 1
  level.association          :user
end

// rspec case:传递

  it "should reject user type nil" do
    user = Factory.build(:user, :user_type => nil)
    user.should_not be_valid  
  end

  it "should take user type 'employee'" do
    user = Factory.build(:user, :user_type => 'employee')
    user.errors[:user_type].should be_empty
    user.should be_valid
  end

有什么想法?谢谢。

1 个答案:

答案 0 :(得分:2)

正如迈克尔·哈特尔在他的excellent Rails tutorial中指出的那样,工厂女孩在模型中绕过了attr_accessible。例如,您可以使用Factory Girl覆盖“魔术”列。也许这也适用于验证?

在这种情况下,使用User.new实际创建用户似乎会更好,因为您正在测试创建和验证过程本身。