【RSpec】Factory_botについて

はじめに

Factory_Botの使用方法について説明します。(gemはインストール済とする)

【RSpec】初期設定について

初期設定

rails_helper.rb

RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

テストデータの作成方法

Userモデルがある場合、

spec/factories/配下にテストしたい該当モデルのファイルを作成する。 Userモデルならusers.rbという形でファイルを作成する。

spec/factories/users.rb

FactoryBot.define do
  factory :user do
    name { "test" }
    email { "example@com" }
  end
end

このように、ファクトリを作成できます。

テストデータの使用方法

spec/models/users_spec.rb

RSpec.describe User, type: :model do
  let(:user){ FactoryBot.create(:user) } #通常の書き方 DB登録される
  let(:user){ create :user} #省略記法

  let(:user){ FactoryBot.build (:user)} #通常の書き方 DB登録されない
  let(:user){ build :user} #省略記法

  let(:user){ build :user, name: "hogehoge"} #上書きすることも可能
end

traitの使用

 traitを使用することによって、factoryのデータを柔軟に変更できます。例えば、管理者、編集者、記者と分けたい場合はこのように記述します。

users.rb

FactoryBot.define do
  factory :user do
    sequence(:name) { |n| "user-#{n}" }
    password { 'password' }
    password_confirmation { 'password' }
    role { :writer }

    trait :admin do
      sequence(:name) { |n| "admin-#{n}" }
      role { :admin }
    end

    trait :editor do
      sequence(:name) { |n| "editor-#{n}" }
      role { :editor }
    end

    trait :writer do
      sequence(:name) { |n| "writer-#{n}" }
      role { :writer }
    end
  end
end

呼び出すときは、このようにします。

users_spec.rb

RSpec.describe User, type: :model do
  let(:user){ create :user, :writer} 基本データにwriterのnameとroleを上書きする 
 let(:user){ create :user, :admin}  基本データにadminのnameとroleを上書きする 

参考資料

【Rails】factory_botの使い方について