我想测试用户注册时是否应该存在密码。 在我的测试中:
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 ="",则测试失败。谁能帮我理解为什么?密码有什么区别?对于电子邮件,我使用""它运作良好。
谢谢!
答案 0 :(得分:0)
@user.email = ""
的测试通过,因为即使您没有指定最小长度验证,也可以进行正则表达式验证。
VALID_EMAIL_REGEX = / \ A [\ W + - 。] + @ [A-Z \ d - ] +。。([A-Z \ d - ] +)* [A-Z] + \ Z /我
对于密码,您有最小长度验证,因此@user.password = ""
也应该通过测试。