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を使うことで冗長な記述が短くなり、より見やすくすることができました。