1
2

More than 1 year has passed since last update.

FacroryBotとは

Rspecでテストを行う際にテストデータの作成をサポートするGemです。
Gemfileでgroup :test do ~ endの箇所にgem "factory_bot_rails"記述し使用します。
FacroryBotを使用するにはspec/factories/モデル名.rbといった形でファイルを作成します。

今回は仮にUserモデルを例にして作成します。

% rails g factory_bot:model user(モデル名)

gemのインストールができたら上記のコマンド入力することでspec/factories/users.rbが作成され以下の雛形が出来上がっています。

spec/factories/users.rb
FactoryBot.define do
  factory :user do

  end
end

今回は名前とメールアドレスのダミーデータを作成する例として、テストコードを一つずつ見ていきましょう。

spec/factories/users.rb
FactoryBot.define do
 factory :user do
  full_name  { Faker::Name.name } #名前のようなダミーデータの生成
  email      { Faker::Internet.email } # メールアドレスのようなダミーデータの生成
 end
end

FactoryBot.define do ~ end

  • 宣言文であり、データの定義を行う際に記述します。

factory :user do ~ end

  • どのモデルに対してデータ定義を行うのかを記します。
    ex) factory :モデル名 do ~ end

full_name { Faker::Name.name }

  • 名前のようなダミーデータの生成をしています
  • カラム名 {値}の形になっています。
  • Faker::はFaker(gem)を使用する時の宣言
  • Nameの部分はどのダミーテキストタイプを使用するかを指定
  • nameの部分で文字列を作成します

email { Faker::Internet.email }

  • メールアドレスのようなダミーデータの生成をしています
  • カラム名 {値}の形になっています。
  • Faker::はFaker(gem)を使用する時の宣言
  • Internetの部分はどのダミーテキストタイプを使用するかを指定
  • emailの部分で文字列を作成します

定義したデータをどのように使用するのか

models/user_spec.rb
RSpec.describe 'Userモデルのテスト', type: :model do
 describe `保存確認` do
  it "有効な会員情報の場合は保存されるか" do
    expect(FactoruBot.build(:user)).to be_vaild
 end
end
   

expectの期待値でFactoruBot.build(:user)として使用されています。
FactoryBot.build(:モデル名)で対象モデルのインスタンスを作成します。
FactoryBotを使用すれば、インスタンスをnewして値を代入する手間が省かれ、簡潔に記述することが可能になります。

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