テストで使える!ランダムなデータを作るFakerとGimei

f:id:endoakak:20200725103845j:plain

テストコードを書く際に、ユーザーネームやパスワードなどランダムなデータを作りたいときがあると思います。そんな時に便利なFakerとGimeiというgemについて紹介します。

Fakerの使い方

Fakerはランダムなデータを自動で生成してくれるgemです。名前、メールアドレス、パスワードはもちろんのこと、色々な種類の値を作れるので、詳しいことはこちら

https://github.com/faker-ruby/faker

実際に使うために、まずはgemをインストールしましょう。

group :development, :test do
  gem 'faker'
end
% bundle install

Userモデルの単体テストコードのため、架空のuserをFactoryBotで作成するとします。

以下のような感じで使います。

factory :user do
  name { Faker::Name.name }
  email { Faker::Internet.free_email }
  password = { Faker::Internet.password }
  password { password }
  password_confirmation { password }
end

passwordをいったん変数に入れているのは、userのpasswordとpassword_confirmationの値を揃えるためです。

※このパスワードは英数字混合ではない

この方法でパスワードを作成する注意点として、必ずしも英字と数字の両方を含むとは限らないです。英数字のランダムな文字列が返されるのですが、結構な頻度で英字だけのパスワードになります。

英数字混合のパスワードを作りたくて探していたら、この方法を見つけました。

Faker::Lorem.characters(min_alpha: 1, min_numric: 1)

これなら、アルファベットと数字を少なくとも一つ以上含んだランダムな文字列を得られます。
文字数を指定することも可能です。

Gimeiとは?

GimeiはFakerの日本語版のようなものです。日本語の名前や住所を生成してくれます。ちなみにFakerでもひと手間かければ日本語の値を作れるらしいです。

公式のGitHubはこちら

https://github.com/willnet/gimei

まずはインストールします。

group :development, :test do
  gem 'gimei'
end
% bundle install

使い方はFakerとほとんど同じです。

factory :user do
  name { Gimei.name }
  name_kana { Gimei.name.katakana }
  address { Gimei.prefecture.kanji }
end

Gimeiで作れるのは名前と住所ぐらいなので、Fakerと比べると種類は限られています。

まとめ

  • ランダムな値を作成したい時はFaker
  • 名前、メールアドレス、文字列など、あらゆるデータが作れる
  • 日本語のデータが欲しい時はGimeiも便利