User has secure password
在 model 加完 password_digest 屬性也裝了 bcrypt gem 後,在 model 加上 has_secure_password 方法:
app/models/user.rb
class User < ActiveRecord::Base
before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[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
end
此時執行測試會失敗(Red):
$ bundle exec rake test
這是因為 has_secure_password 方法會強制要通過 password 和 password_confirmation 這兩個虛擬屬性的驗證,但在 test/models/user_test.rb 檔案裡面,setup 方法的設定,並沒有這兩個屬性:
def setup
@user = User.new(name: "Example User", email: "[email protected]")
end
所以要加上這兩個屬性,測試才會通過(Green):
test/models/user_test.rb
def setup
@user = User.new(name: "Example User", email: "[email protected]",
password: "foobar", password_confirmation: "foobar")
end
這樣測試就會通過了(Green):
$ bundle exec rake test