LoginSignup
2
1

More than 3 years have passed since last update.

Railsモデル単体テストコードにおける、パスワードのダミーデータ生成注意点

Posted at

記事投稿の背景

モデル単体テストにおけるダミーデータ作成のため、Fakerを活用していた。Fakerは名前、email等をランダムに生成する。しかしパスワードデータを生成する場合、注意が必要だと分かった(後述)。そのため、注意点と対処方法を備忘録として記事を投稿する。

補足
FakerとはRuby on RailsのGemの一つである。fakerの活用により、値をランダムに生成できる。詳細は下記リンク先を参照のこと。

Faker公式のGithub

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

以上

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1