9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby on Rails】FactoryBotとFakerについてまとめ

Posted at

初学者です。
テストコードがなぜか大好きです。

Ruby on Railsでテストコードを書く際にFactoryBotとFakerを使うと効率的にできます。
使い方をまとめます。

前提条件

Rspecを導入済みであること

FactoryBot

FactoryBotとは、Railsで利用できるGemです。
FactoryBot用のファイルであらかじめのインスタンスに定める値を設定しておき、各テストコードで使用します。
例えばユーザー登録のテストコードで、ユーザー名やメールアドレスやパスワードをFactoryBotにまとめておくことで効率的に記述をすることができます。

FactoryBot導入

下記のようにGemfilegroup :development, :test dogem 'factory_bot_rails'と記述します。

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'

end

ターミナルで下記のコマンドを実行しGemを導入します。

ターミナル
bundle install

このあとにテストコードを記述するためのファイルを生成すると、specディレクトリ配下にfactoriesディレクトリFactoryBot用のファイル(例:users.rbなど)が生成されますが、既にテストコード用のファイルを生成している場合などは生成されないので手動で作成しても問題ありません。

specディレクトリ配下にfactoriesディレクトリFactoryBotを記述するためのファイルを作成します。

例:spec/factories/users.rb

そのファイル内に記述していきます。

spec/factories/users.rb
FactoryBot.define do
  factory :user do
    name                  {'test'}
    email                 {'test@example.com'}
    password              {'123456'}
    password_confirmation {password}
  end
end

上記のように記述しておけば、テストコード内で下記のように記述してデータを使い回すことができます。

spec/models/user_spec.rb
user = FactoryBot.build(:user)

上記の例ではuserという変数にFactoryBotのデータを入れているので、例えばuser.nameのように呼び出して使うことができます。

このままでもいいのですが、実際のサービスはユーザーがどんなデータを入れてくるかわからないこともあるのでそれを想定していた方がいいと思います。
そのために使うのがFakerです。

Faker

Fakerとは、Railsで利用できるGemです。
ランダムな値を生成してくれて、人名や住所や電話番号など様々用意されています。
Faker公式Github
アニメの名前とか登場人物とかもあって見てるだけでも面白いです。

ちなみに日本語のデータがよければgimeiというGemもあります。
例えばバリデーションで日本語のカナじゃないとダメとかにしてる場合はFakerよりもgimeiが使いやすいと思いました。
gimei公式Github

Faker導入

下記のようにGemfilegroup :development, :test dogem 'faker'と記述します。

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

ターミナルで下記のコマンドを実行しGemを導入します。

ターミナル
 bundle install

先ほどのFactoryBotの内容をFakerを利用したものに変更します。

spec/factories/users.rb
FactoryBot.define do
  factory :user do
    name                  {Faker::Name.initials(number: 2)}
    email                 {Faker::Internet.free_email}
    password              {Faker::Internet.password(min_length: 6)}
    password_confirmation {password}
  end
end

書き方は公式のGIthubにも書いてあるのですが
Faker::の後に指定したいものを選択します。

例えば名前だけでもたくさんあります。

Faker

Faker::Name.name                 #=>フルネームの名前
Faker::Name.first_name           #=>firstnameだけ
Faker::Name.initials             #=>イニシャル
Faker::Name.initials(number: 2) #=>2文字のイニシャル

基本的に公式に書いてある通りに記述すればOKなので簡単にできます。
コンソールでデータを見ると面白いですよ。

以上です。

9
7
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
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?