factory_bot 【rspec】 【完全初心者用】
factory_botとは?
簡単にダミーのインスタンスを作成することができるGem。ここではspecファイルの記述を効率化するために使用します。
factory_botの導入
- Gem"factory_bot_rails"をインストールする
- specディレクトリ直下にfactoriesというディレクトリを作成する
- その中に作成したインスタンスの複数形のファイル名でRubyのファイル(ここではusers.rb 、前回の記事を参照しています。)を作成する。
- rails_helper.rb内を以下のように編集
RSpec.configure do |config| #下記の記述を追加 config.include FactoryBot::Syntax::Methods end
- users.rbを以下のように編集。このように予めUserクラスのインスタンスを定義することで、specファイルの中で特定のメソッドにより簡単にインスタンスを精製できる。(これで準備は完了です)
FactoryBot.define do factory :user do nickname {"kida"} email {"kida@gmail.com"} password {"00000000"} password_confirmation {"00000000"} end end
factory_bot の基本的なメソッド
- buildメソッド
引数にシンボル 型でとったクラス名のインスタンスを 作成する
#factory_botを利用しない場合 user = User.new(nickname: "kida", email: "kida@gmail.com", password: "00000000", password_confirmation: "00000000") #factory_botを利用する場合 user = build(:user)
- createメソッド
buildとほぼ同じ働きだが、このメソッドではテスト用のDBにデータが保存される。しかし、テストが実行され終了するたびにテスト用のDBはロールバックされるので、binding.pryなどでテストの実行を一時停止しないとテスト用のDBに保存された値をSequelProなどで確認できない
このようにfactory_botを使うことで冗長な記述が短くなり、より見やすくすることができました。