ある課題に取り組んでいて、ググって探して当て突き止めた情報を自分なりに深堀りしてみました。よろしければお付き合いください。
deviseを使ってログイン・ログアウト・新規登録を完了して次の課題である「単体テスト」をやっています。
気づき
password { Faker::Internet.password(min_length: 8) }
は
min_length: 最低文字数
max_length: 最大文字数
mix_case: false, 大文字を混ぜる・混ぜない
special_characters: 特殊記号入れる・入れない
これくらいしか設定できない。
Fakerで6文字で英数混合パスワードを設定するには
Faker::Internet.password使用しないと気づくところから始まります。
検索結果
ネットで検索して自分の今の知識で理解できる情報は以下です。役に立てれば嬉しいです。
####Faker::Lorem.characters(min_alpha: 1, min_numric: 1)
検索目的
Fakerで単体テストコードで英数混在の6文字以上のパスワードをつくる。
*Fakerとはテストに使うダミーデータを用意するGem
ここで問題になってくるのが
password { Faker::Internet.password(min_length: 8) }
Fakerはメールアドレス、パスワード、URL、スラッグ、IPアドレスなどをインターネット関連としてダミーデータを作成してくれるのですが、6文字の中に数値もしくは、アフファベットのいずれかだけで生成される可能性が非常に高いというリスクがあることです。
Faker::Internet.password(min_length: 8)は諦めて方向転換
*(参考)min_lengthは最低文字数を指定
他に
指定 | 指定内容 |
---|---|
special_characters: true | 特殊文字を含む |
special_characters: false | 特殊文字含まない |
mix_case: true | 大文字含む |
mix_case: false | 大文字含まない |
の設定ができます。
解決策1
参考サイト
https://github.com/faker-ruby/faker/blob/master/doc/default/lorem.md
Faker::Lorem.characters(min_alpha: 1, min_numric: 1)活躍するのがこれ
基本形(charactersというのは「文字」の意味)
####Faker::Lorem.characters(number: 10) #=> "ang9cbhoa8"
指定 | 指定内容 |
---|---|
number: 10 | ランダムな文字10文字を生成 |
####Faker::Lorem.characters(number: 10, min_alpha: 4) #=> "ang9cbhoa8"
指定 | 指定内容 |
---|---|
number: 10 | ランダムな文字10文字を生成 |
min_alpha: 4 | 10文字の中に最低4文字以上はアフファベットを含める |
####Faker::Lorem.characters(number: 10, min_alpha: 4, min_numeric: 1) #=> "ang9cbhoa8"
指定 | 指定内容 |
---|---|
number: 10 | ランダムな文字10文字を生成 |
min_alpha: 4 | 10文字の中に最低4文字以上はアフファベットを含める |
min_numeric: 1 | 10文字の中に最低1文字以上数値を含める |
回答例
password { Faker::Lorem.characters(number: 6, min_alpha: 1, min_numeric: 1) }
解決策2(以下参考サイト)
参考サイト
https://github.com/faker-ruby/faker/blob/master/doc/default/alphanumeric.md
指定方法は違いますが、にています。
####Faker::Alphanumeric.alphanumeric(number: 10) #=> "3yfq2phxtb"
####Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3) #=> "3yfq2phxtb"
####Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3, min_numeric: 3) #=> "3yfq2phx8b"
*設定の説明は解決策1と同じなので割愛
ご参考までに