LoginSignup
1
0

More than 1 year has passed since last update.

[Rails] テストコードでFakerを使う

Posted at

はじめに

前回はテストコードでFactoryBotの導入と使い方をアウトプットさせていただきました。
今回は似たような感じで、テストコードでよく使用されるであろう、値をランダムに生成してくれるFakerの導入と使い方を説明できればと思います。よろしくお願いします。

説明に使用しているソースコードやファイルは前回の続きです。

Fakerとは

メールアドレスや人名、パスワードなど、様々な意図に応じた値を生成してくれます。なぜ、このランダムな値が必要になるかは、複数のテストを行う際に、一意性の値などは、意図せず弾かれてしまう可能性があるからです。
Fakerは毎回ランダムに値を生成してくれるのでその心配がなくなります。

Fakerを導入

FactoryBot同様、FakerもGemfileのgroup :development, :test doに記述します。気をつける点ですね。

Gemfile
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の記述を変更します。

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

1
0
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
1
0