gpt4 book ai didi

ruby-on-rails - Rspec 验证失败 - 属性不能为空但不为空

转载 作者:行者123 更新时间:2023-12-04 02:46:36 25 4
gpt4 key购买 nike

我刚刚编写了一个测试来测试新用户创建是否也包含管理设置。这是测试:

describe User do

before(:each) do
@attr = {
:name => "Example User",
:email => "user@example.com",
:admin => "f"
}
end

it "should create a new instance given valid attributes" do
User.create!(@attr)
end

it "should require a name" do
no_name_user = User.new(@attr.merge(:name => ""))
no_name_user.should_not be_valid
end

it "should require an email" do
no_email_user = User.new(@attr.merge(:email => ""))
no_email_user.should_not be_valid
end

it "should require an admin setting" do
no_admin_user = User.new(@attr.merge(:admin => ""))
no_admin_user.should_not be_valid
end

end

然后,在我的用户模型中,我有:
class User < ActiveRecord::Base
attr_accessible :name, :email, :admin

has_many :ownerships
has_many :projects, :through => :ownerships

email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

validates :name, :presence => true,
:length => { :maximum => 50 }

validates :email, :presence => true,
:format => { :with => email_regex },
:uniqueness => { :case_sensitive => false }

validates :admin, :presence => true

end

我清楚地创建了一个具有管理员设置的新用户,为什么它说它是假的?我将管理员设置的迁移创建为 admin:boolean。我做错什么了吗?

这是错误:
Failures:

1) User should create a new instance given valid attributes
Failure/Error: User.create!(@attr)
ActiveRecord::RecordInvalid:
Validation failed: Admin can't be blank
# ./spec/models/user_spec.rb:14:in `block (2 levels) in <top (required)>'

奇怪的是,当我注释掉验证 :admin, :presence => true 时,测试正确创建了用户,但在“用户应该需要管理员设置”时失败

编辑:当我将@attr :admin 值更改为“t”时,它起作用了!为什么当值为 false 时它不起作用?

最佳答案

来自 rails guides :

Since false.blank? is true, if you want to validate the presence of a boolean field you should use validates :field_name, :inclusion => { :in => [true, false] }.



基本上,看起来 ActiveRecord 正在将您的“f”转换为 false在验证之前,然后它运行 false.blank?并返回 true (意味着该字段不存在),导致验证失败。因此,要在您的情况下修复它,请更改您的验证:
validates :admin, :inclusion => { :in => [true, false] }

对我来说似乎有点 hacky...希望 Rails 开发人员会在 future 的版本中重新考虑这一点。

关于ruby-on-rails - Rspec 验证失败 - 属性不能为空但不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com