ユーザー管理機能のバリデーションについて
ユーザー管理機能のバリデーション設計で中々エラーを解決できなかったのでまとめておきます。
1つめのエラー(一意性)
User ユーザー新規登録 重複したemailが存在する場合は登録できないこと
Failure/Error: expect(@user.errors.full_messages).to include('Email has already been taken')
expected to include "Email has already been taken"
登録されたエラー文の中から'Email has already been taken'が出て欲しいが、エラー文が出ませんでしたということ。
上記バリデーションでemailが空では登録できないとしていたところを
上記でemailが空では登録できないかつ、登録されたことのあるものでは登録できない(一意性)と条件をつけると解決しました。
2つめのエラー(半角英数字混合)
2) User ユーザー新規登録 passwordが半角英数字混合であれば登録できる
Failure/Error: expect(@user.errors.full_messages).to include("Password には英字と数字の両方を含めて設定してください")
expected to include "Password には英字と数字の両方を含めて設定してください"
始め半角英数字混合でテストコードを作成しようとしていたが、それはできないようで1つずつ半角英文字がないと登録できないと、半角数字がないと登録できないとに分けて書いた。
また、エラー文を定型文でなく"Password には英字と数字の両方を含めて設定してください"にしていたこともエラーの原因のため定型文の "Password is invalid"に直した。
また、バリデーション の正規表現が適切でなかったため、上記のように変更した。
という形式で書く。
また、正規表現は以前間違えてエラーなどが出ていると、コードが合っていてもエラーが出ることがあります。その場合、エディタやターミナルを一度切って、再接続するとエラーが出ないことがあります。また、コピーで持ってきた正規表現をコピーし直すことも有効です。