模型通过了 :presence => 的验证true 但数据库中仍然为 nil

发布于 2024-12-04 10:58:22 字数 1292 浏览 1 评论 0原文

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

运行轨道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                 "[email protected]"
  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

有什么想法吗?谢谢。

user_type is a column in user model and it has to be :presence => true. It rejects in rspec when passing a nil to user_type. However the factory_girl can store a nil user_type into the field with sqlite3.

Running rails 3.1.0. rspec 2.6.0 and factory_girl 2.1.0

//user model:

  validates :user_type,  :presence => true  

//Factory girl definition:

Factory.define :user do |user|

  user.name                  "Test User"
  user.email                 "[email protected]"
  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: passed

  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

Any thoughts? thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖 2024-12-11 10:58:22

正如 Michael Hartl 在他的出色的 Rails 教程中指出的那样,Factory Girl 绕过了<模型中的 code>attr_accessible。例如,您可以使用 Factory Girl 覆盖“魔法”列。也许这也适用于验证?

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

As Michael Hartl pointed out in his excellent Rails tutorial, Factory Girl bypasses attr_accessible in the model. For instance, you can overwrite the "magic" columns using Factory Girl. Perhaps this applies to validations as well?

It seems like it would be better in this case to actually create your user with User.new, since you are testing the process of creation and validation itself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文