【Rails】テストに使うダミーデータを用意する【Faker】


はじめに

RSpecなどでテストする際に、FactoryBotなどであらかじめデータを用意することがありますが、その際にランダムデータをいい感じに作ってくれるFakerの使い方について書いていきます。

準備

gemをインストールするだけです。

Gemfile
group :development, :test do
  # (略)
  gem 'faker'
end
ターミナル
$ bundle install

使い方

rbファイル内でFaker::[ジャンル].[タイトルなど]と入力すればOKです。
どんなものが用意されているかは公式リファレンスから確認してみてください。

READMEのとこにサンプルが並んでるので、使いたいものをクリックしてリンク先の表示どおりに使うだけです。

使ってみないとわかりにくいので実際に使ってみます。
今回はMoviesを使ってみたいと思います。READMEのMoviesをクリックすると下のように同一ページのMovies欄に飛びます。

今回はFaker::movieを使います。
Faker::movieをクリックして詳細ページに飛びます。

このページに書かれているとおりに記述すれば、ランダムにデータを取得してくれます。
試しにFaker::Movie.titleで映画のタイトルを取得してみましょう。

コンソールで確かめます。

ターミナル
$ rails c

こんな感じで取得してくれます。

ポケモンやスターウォーズなんかのデータもあるので面白いです。

FacrotyBotでの使い方

FactoryBotを使う時は下のように書けばOKです。

book.rb
FactoryBot.define do

  factory :book do
    title     { Faker::Book.title }
    author    { Faker::Book.author }
    publisher { Faker::Book.publisher }
  end

end

同様にseedファイルなんかでも使えば初期データをランダムにいろいろ作成できたりします。