Help us understand the problem. What is going on with this article?

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

はじめに

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

準備

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

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

使い方

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

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

使ってみないとわかりにくいので実際に使ってみます。
今回はMoviesを使ってみたいと思います。READMEのMoviesをクリックすると下のように同一ページのMovies欄に飛びます。
25cbc0c934fbfedd13009afd6e7fb9ff.png
今回はFaker::movieを使います。
Faker::movieをクリックして詳細ページに飛びます。
9c862c81313fa7018403ab0fb7212a8e.png
このページに書かれているとおりに記述すれば、ランダムにデータを取得してくれます。
試しにFaker::Movie.titleで映画のタイトルを取得してみましょう。

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

ターミナル
$ rails c

95008ab8d5f596fb880f99867f2cab20.png

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

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

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ファイルなんかでも使えば初期データをランダムにいろいろ作成できたりします。

koki_73
レアなつよつよエンジニアを目指しています。 エンジニア集団の中で一意性制約に引っかからないように日々精進
https://koki-73.github.io/my-portfolio/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away