person t-kobayashi

Laravelでemailバリデーションを変更したらテストが通らなくなった

calendar_today 2021年09月08日 update 2021年09月08日
Facebook Twitter LINE はてなブックマーク Pocket

Laravelのemailのバリデーションを少し厳しくしたところ、これまで問題なかったテストが失敗するようになってしまったので、その対策を記述したいと思います。

問題

Laravelではデフォルトのemailバリデーションに以下のようなより厳しいチェックを追加することができます。

  • rfc: RFCValidation
  • strict: NoRFCWarningsValidation
  • dns: DNSCheckValidation
  • spoof: SpoofCheckValidation
  • filter: FilterEmailValidation

今回、下記のようなバリデーションを追加したところ、テストが失敗するようになりました。

'email' => ['required', 'string', 'email:strict,dns,filter', 'max:255'],

ここでは、このdnsバリデーションが、そのメールアドレスが実際にDNSに存在するかをチェックします。

しかし、テストなどで$faker->safeEmail()で生成されたメールアドレスは必ずしも実在するドメインではないので、バリデーションに失敗してしまい、その結果、テストに失敗してしまいました。

解決策

テストで使用するメールアドレスを実在するドメインのもので書き換えてあげれば、大抵の場合は事足りると思いますが、$faker->freeEmail()というメソッドを使うと、gmailやyahooのように実在するフリーメールのドメインのメールアドレスのみをランダムに生成することが可能になります。

今回は、safeEmail()freeEmail()に変更するだけでテストがこれまで通りパスするようになりました。

参考サイト

https://laravel.com/docs/8.x/validation#rule-email

https://readouble.com/laravel/8.x/ja/validation.html

https://www.valcanbuild.tech/laravel-dns-email-validation/

関連記事

Laravelの記事一覧を見る

Laravelの質問

dosanko が3年前に投稿

質問日時 2021年05月26日

search