#目次
①FactoryBotとは
②FactoryBot導入について
③FactoryBotのメリット
##①FactoryBotとは
ダミーのインスタンスを簡単に作成することができるテストツール。
##②FactoryBot導入について
factory_bot_railsというgemを使用する。
Gemfileのdevelopmentのtest環境にfactory_bot_railsを記述し、bundle installをする
Gemfile
group :development, :test do
gem 'rspec-rails'
gem 'factory_bot_rails'
end
ターミナル
bundle install
ターミナル
rails g factory_bot:model client
#factoryディレクトリにclient.rbを作成する
spec/factories/client.rb
FactoryBot.define do
factory :client do
name {"careet_boy"}
email {"niconico@gmail"}
password {"niconico"}
password_confirmation {"niconico"}
end
end
##③FactoryBotのメリット
結論としては、記述が楽になる。
spec/model/client_spec.rb
1 require 'rails_helper'
2 describe Client do
3 describe 'クライエントの新規の登録' do
4 it "nameが無ければクライントの登録はできない" do
5 client = Client.new(name: "",email:"aaa@gmail",password:"11111",password_confirmation:"11111")
6 client.valid?
7 expect(client.errors.full_messages).to include("Name can't be blank")
8 end
9 end
10 end
上記のコードがFactoryBotを使うことによって以下のように記述ができる
spec/model/client_spec.rb
1 require 'rails_helper'
2 describe Client do
3 describe 'クライエントの新規の登録' do
4 it "nameが無ければクライントの登録はできない" do
5 client = FactoryBot.build(:client) #Clientのインスタンスを生成し
6 client.name = "" #nameを空にする
7 client.valid?
8 expect(client.errors.full_messages).to include("Name can't be blank")
9 end
10 end
11 end
補足:
FactoryBotのbuildとcrateの違い
・buildはデータが保存されない
・createはデータが保存される
データベースの値を利用するテストが必要な場合はcreateを使用する。
データベースにアクセスする必要がない場合は,buildを使用する。テストの実行速度を上げるため。