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して値を代入する手間が省かれ、簡潔に記述することが可能になります。