Ruby on rails Rails测试获胜';具有唯一性的t传递:{区分大小写:false}集
在我的user.rb模型中,我有:Ruby on rails Rails测试获胜';具有唯一性的t传递:{区分大小写:false}集,ruby-on-rails,ruby-on-rails-3,unit-testing,testing,Ruby On Rails,Ruby On Rails 3,Unit Testing,Testing,在我的user.rb模型中,我有: validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } validates :email, presence: true, format: { with: VALID_EMAIL
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
我有以下测试:
test "email address uniqueness regardless of case" do
dup_user = User.new(name: "First Last", email: @user.email.upcase)
dup_user.save
assert !@user.valid?
end
而那个测试不会通过。我也试过,assert@user.save.valid?
认为它在保存时会失败,但这也不起作用
我做错了什么?以下是我最后做的事情: 在我的user.rb模型中,我有:
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
我有以下测试和设置:
def setup
@user = User.new(name: "John Doe", email: "example@example.com",
password: "foobar", password_confirmation: "foobar")
@user.save
end
test "email address uniqueness regardless of case" do
dup_user = User.new(name: "First Last", email: @user.email.upcase)
assert !dup_user.save
end
简言之,我所做的是传递一个用户对象,将其求值为true,而不是save块。如果执行object.save.valid?您不是询问保存是否有效,而是询问对象。save返回了一个有效的对象,该对象是从object.save返回的。save为false(而不是对象)。以下是我最后要做的: 在我的user.rb模型中,我有:
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
我有以下测试和设置:
def setup
@user = User.new(name: "John Doe", email: "example@example.com",
password: "foobar", password_confirmation: "foobar")
@user.save
end
test "email address uniqueness regardless of case" do
dup_user = User.new(name: "First Last", email: @user.email.upcase)
assert !dup_user.save
end
简言之,我所做的是传递一个用户对象,将其求值为true,而不是save块。如果执行object.save.valid?您不是询问保存是否有效,而是询问对象。save返回了一个有效对象,而object.save返回的是false(而不是object)。您应该检查dup\u用户是否有效
test "email address uniqueness regardless of case" do
dup_user = User.new(name: "First Last", email: @user.email.upcase)
assert ! dup_user.valid?
end
您应该检查dup\U用户是否有效
test "email address uniqueness regardless of case" do
dup_user = User.new(name: "First Last", email: @user.email.upcase)
assert ! dup_user.valid?
end
啊,接得好!从我下面的回答中可以看出,我对它做了一些修改。你认为哪一个更好?我的回答省去了访问数据库的时间。使您的测试更快。另外,
save
已经运行了valid?
。啊,捕捉得好!从我下面的回答中可以看出,我对它做了一些修改。你认为哪一个更好?我的回答省去了访问数据库的时间。使您的测试更快。而且save
已经运行valid?
。