#記事投稿の背景
モデル単体テストにおけるダミーデータ作成のため、Fakerを活用していた。Fakerは名前、email等をランダムに生成する。しかしパスワードデータを生成する場合、注意が必要だと分かった(後述)。そのため、注意点と対処方法を備忘録として記事を投稿する。
補足
FakerとはRuby on RailsのGemの一つである。fakerの活用により、値をランダムに生成できる。詳細は下記リンク先を参照のこと。
#Fakerを用いたパスワード生成の注意点
下記のような記述により、パスワードカラムへのダミーデータを生成した。
user.rb
FactoryBot.define do
factory :user do
nickname { Faker::Name.name }
email { Faker::Internet.free_email }
password { Faker::Internet.password(min_length: 8) }
password_confirmation { password }
end
end
このとき生成されるパスワードは大抵数字と文字列の組み合わせになるものの、稀に文字列のみ、あるいは数字のみが生成されることがある。これはパスワードのバリデーションを数字と文字列の組み合わせにした場合、ダミーデータとして不適となることを意味する。
ターミナル
[8] pry(#<RSpec::ExampleGroups::User::Create>)> @user = FactoryBot.build(:user)
=> #<User id: nil, email: "michale@yahoo.com", nickname: "Eugenie Dach", created_at: nil, updated_at: nil>
[9] pry(#<RSpec::ExampleGroups::User::Create>)> @user.password
=> "1HyWz2Mr"
[10] pry(#<RSpec::ExampleGroups::User::Create>)> @user = FactoryBot.build(:user)
=> #<User id: nil, email: "landon_barrows@yahoo.com", nickname: "Kathi D'Amore", created_at: nil, updated_at: nil>
[11] pry(#<RSpec::ExampleGroups::User::Create>)> @user.password
=> "NdKrAcLw"
#対処方法
パスワードに対し数字・文字列の組み合わせのバリデーション設定をしている場合、手動でパスワードのダミーデータを作成すること。
user.rb
FactoryBot.define do
factory :user do
nickname { Faker::Name.name }
email { Faker::Internet.free_email }
password { 'test1234TEST' }
password_confirmation { password }
end
end
以上