背景
has_secure_passwordを設定したUserモデル
user.rb
class User < ApplicationRecord
has_secure_password
が、以下のテスト
user_controller_test.rb
test "password should be exist when create" do
@user.password = " "
assert_not @user.valid?
end
で引っかかってしまう問題に悩んでいました。
(has_secure_passwordは空白にvalidationがかかると思っていたため https://qiita.com/Shantti-Y/items/19ea23b81f3421063fc5)
validates :password, presence: trueをつけるとテストをパスします。
じゃあ、has_secure_passwordのデフォルトvalidationとは一体...
結論
Rails 4.2から以下のように変更されていたとのことです。
has_secure_password がデフォルトで空白のパスワードを許容するようになりました (例: 空白スペースのみのパスワード)。 https://railsguides.jp/4_2_release_notes.html
空白を許可したくない場合は別途validates :password, presence: true
等の追加が必要みたいです。