はじめに
前回はテストコードでFactoryBotの導入と使い方をアウトプットさせていただきました。
今回は似たような感じで、テストコードでよく使用されるであろう、値をランダムに生成してくれるFakerの導入と使い方を説明できればと思います。よろしくお願いします。
説明に使用しているソースコードやファイルは前回の続きです。
Fakerとは
メールアドレスや人名、パスワードなど、様々な意図に応じた値を生成してくれます。なぜ、このランダムな値が必要になるかは、複数のテストを行う際に、一意性の値などは、意図せず弾かれてしまう可能性があるからです。
Fakerは毎回ランダムに値を生成してくれるのでその心配がなくなります。
Fakerを導入
FactoryBot同様、FakerもGemfileのgroup :development, :test doに記述します。気をつける点ですね。
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'rspec-rails', '~> 4.0.0'
gem 'factory_bot_rails'
gem 'faker'
end
からのbundle install
% bundle install
これで導入完了です。
コンソールから試してみましょう。rails cでコンソールを起動させます。
[1] pry(main)> Faker::Name.initials(number: 2)
=> "TJ"
[2] pry(main)> Faker::Internet.free_email
=> "ruthanne_thompson@gmail.com"
[3] pry(main)> Faker::Internet.password(min_length: 6)
=> "O5y0Ru"
このように毎回ランダムに生成してくれます。
早速Fakerの記述をしていきます。
前回使用したspec/factories/users.rbの記述を変更します。
FactoryBot.define do
factory :user do
nickname {Faker::Name.initials(number: 2)}
email {Faker::Internet.free_email}
password {Faker::Internet.password(min_length: 6)}
password_confirmation {password}
end
end
これで完了です。前回と同じようにテストを実行しても変わらず成功するはずです。
おまけ
Fakerの公式GitHubを見ていたら、本当に様々なランダムな値を作れるみたいで面白かったので少し遊んでました。例えば下記をみてください
[1] pry(main)> Faker::JapaneseMedia::DragonBall.character
=> "Super Saiyan Goten"
[2] pry(main)> Faker::JapaneseMedia::DragonBall.character
=> "Raditz"
[3] pry(main)> Faker::JapaneseMedia::DragonBall.character
=> "Goten"
[4] pry(main)> Faker::JapaneseMedia::DragonBall.character
=> "Demon King Piccolo"
ドラゴンボールのキャラクターの名前をランダムで生成してくれます笑
こんなのはどうでしょうか
[1] pry(main)> Faker::JapaneseMedia::StudioGhibli.movie
=> "Porco Rosso"
[2] pry(main)> Faker::JapaneseMedia::StudioGhibli.movie
=> "The Cat Returns"
[3] pry(main)> Faker::JapaneseMedia::StudioGhibli.movie
=> "Porco Rosso"
[4] pry(main)> Faker::JapaneseMedia::StudioGhibli.movie
=> "Castle in the Sky"
さすがジブリ!Fakerでランダムに生成できます
でも、英語表記だとなんだか馴染みがなくてわからない。。。
Porco Rossoは紅の豚ですね
The Cat Rerurnsは猫の恩返しでしょうか、なんか違う気が、、、
Castle in the Skyはラピュタですかね笑
最後にポケモン
[1] pry(main)> Faker::Games::Pokemon.name
=> "ホウオウ"
[2] pry(main)> Faker::Games::Pokemon.name
=> "シェルダー"
[3] pry(main)> Faker::Games::Pokemon.name
=> "ケンタロス"
[4] pry(main)> Faker::Games::Pokemon.name
=> "マリル"
[5] pry(main)> Faker::Games::Pokemon.name
=> "ハネッコ"
まさかの日本語で返ってきました笑
一発目、ホウオウが出たのなんか嬉しかったです。ガチャみたい
こちらのFakerの公式GitHubのREADMEに色々あるのでみて見てください。結構面白いですよ。
https://github.com/faker-ruby/faker