Ruby on Rails测试密码存在失败

时间:2017-02-16 17:44:05

标签: ruby-on-rails

我想测试用户注册时是否应该存在密码。 在我的测试中:

def setup
  @user = User.new(name: "foobar", email: "foobar@gmail.com",
                 password: 'password',
                 password_confirmation: 'password')
end

test "password can't be blank" do
  @user.password = nil
  assert_not @user.valid?
end

用户模型:

validates :name, presence: true, length: { maximum: 20 }

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
                format:  { with: VALID_EMAIL_REGEX },
                uniqueness: { case_sensitive: false}

has_secure_password
validates :password, presence: true, length: { minimum: 8}

此测试通过正常,但如果我将其更改为@ user.password ="",则测试失败。谁能帮我理解为什么?密码有什么区别?对于电子邮件,我使用""它运作良好。

谢谢!

1 个答案:

答案 0 :(得分:0)

@user.email = ""的测试通过,因为即使您没有指定最小长度验证,也可以进行正则表达式验证。

  

VALID_EMAIL_REGEX =   / \ A [\ W + - 。] + @ [A-Z \ d - ] +。。([A-Z \ d - ] +)* [A-Z] + \ Z /我

对于密码,您有最小长度验证,因此@user.password = ""也应该通过测试。