2017-02-16 38 views
0

我想測試用戶註冊時應該存在的密碼。 在我的測試:Ruby on Rails測試密碼存在失敗

def setup 
    @user = User.new(name: "foobar", email: "[email protected]", 
       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+\-.][email protected][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的= 「」,測試失敗。任何人都可以幫我理解爲什麼?這裏的密碼有什麼不同?對於電子郵件,我用「」,它工作正常。

謝謝!

+2

你可以把你的'用戶'模型,所以我們可以看到你的驗證? – tegon

+0

對不起,我現在已經添加了用戶模型 – Rosalie

回答

0

@user.email = ""的測試通過,因爲即使您沒有指定最小長度驗證,您也有正則表達式驗證。

VALID_EMAIL_REGEX = /\A[\w+-.][email protected][a-z\d-]+(.[a-z\d-]+)*.[a-z]+\z/i。

對於密碼,您有最小長度驗證,所以@user.password = ""也應該通過測試。

+0

但我的問題是'@user.password =「」'沒有通過測試,但'@user.password = nil'通過。所以我不知道這兩者有什麼區別。爲什麼一個人不通過其他 – Rosalie

+0

抱歉,我無法弄清爲什麼'@user.password =「」'沒有通過測試。你有兩個條件來處理這個問題:「存在:真」和「長度:{最小:8}」。您可以通過輸入密碼「'」'來檢查應用程序,並查看用戶是否已創建。 'nil'屬於Nil類,而''''屬於字符串(空字符串)。 –