RubyOnRailsのモデル単体テストでPassword is invalidになったりならなかったりしたので原因と対処法をめも。
■状況①
ユーザ情報とクレジットカード情報を入力したら商品を購入できる機能があり、モデルの単体テストを実行している。
■状況②
とあるユーザでログインしていないと商品を購入できないので、ユーザをFactoryBotとFakerで作成してログインさせる。
■状況③
単体テストコードを実行すると、ログイン状態で行われるexampleが成功したりしなかったりする。
失敗の場合、ターミナルにはFactoryBotでユーザ作成時にパスワードがおかしいぜと表示される。(下記スクショ参照)
■原因
Fakerにて生成されたパスワードが、ユーザモデルのパスワードのバリデーションを満たしていなかった。
■バリデーション
・半角6文字以上が必須
・英数混合が必須
■修正したこと
password { Internet.password(min_length: 6) }
↓
password { 'T1' + Faker::Internet.password(min_length: 4) }
'T1'の部分で英数混合を担保しつつ、残りの4文字はFakerでランダム生成するようにしました。
6文字すべてをFakerで生成するとすべて英字もしくは全て数字のパスワードが生成され、要件を満たされていなかった、ということでした。