Rails测试不会通过唯一性:{case_sensitive:false}设置

时间:2012-06-18 20:40:14

标签: 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 }

我有以下测试:

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?认为它会在保存时失败,但这也不起作用。

我做错了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这是我最终做的事情:

在我的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

简而言之,我所做的是将用户对象传递给true,而不是保存片段。如果你做object.save.valid?你不是在询问保存是否有效,而是你的询问是object.save返回了一个有效的对象,object.save返回的是false(而不是对象)。