0

在我的 user.rb 模型中,我有:

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?以为保存会失败,但这也没有用。

我究竟做错了什么?

4

2 回答 2

3

你应该检查是否dup_user有效。

test "email address uniqueness regardless of case" do
    dup_user = User.new(name: "First Last", email: @user.email.upcase)
    assert ! dup_user.valid?
end
于 2012-06-18T21:53:28.230 回答
2

这是我最终做的事情:

在我的 user.rb 模型中,我有:

 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

简而言之,我正在做的是传递一个用户对象来评估为真,而不是保存部分。如果你做object.save.valid?您不是在询问保存是否有效,而是您询问的是 object.save 返回了一个有效的对象,而从 object.save 返回的是 false(而不是对象)。

于 2012-06-18T21:46:19.447 回答